home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / rbbs_pc / 173amrg.zip / 173A-CHG.DOC next >
Text File  |  1990-08-26  |  365KB  |  8,748 lines

  1. ======[ Beta Test Version - Changes to RBBS-PC 17.3 ]========
  2.  
  3. Last Mod:  KG082501
  4.  
  5. This is the chronological, detailed documentation of the changes
  6. made to 17.3, for beta test sites.
  7.  
  8. SysOps:  There is a new HELP07 to put with your other help
  9. files.  Needed to get help with commands at end of message
  10. read.
  11.  
  12. SysOps:  Older versions of CONFIG will not properly initialize
  13. the modem because the modem firmware command now is sent out
  14. exactly as stored in the DEF file and "AT" is not added to
  15. the front.   You need to edit your DEF file to add "AT" to
  16. the "&W" to make it work properly.
  17.  
  18. SysOps:  MODEMS.SET now has 2 additional parameters.  A new
  19. file is included.
  20.  
  21. Sysops:  17.3A now correctly supports macros in the Fast File
  22. search, for both online and offline files.  This allows efficient
  23. implementation of many new features.  
  24.      See the two enhanced utilities CMPBBS10.ZIP and
  25. MFIDX11.ZIP for details.   You can move your files off lines
  26. and you can also list files on other BBS's.
  27.  
  28. CONVENTIONS:
  29.     The changes are assigned numbers that  correspond  to  the
  30.     month,  day, and order in which they were made.  Any mods
  31.     are dated following the modification  description.   The
  32.     lines   of   source   code  that  are  changed/modified/added  are
  33.     designated by the comment beginning in column 70 of "' iiMMDDnn"
  34.     where ii is the initials of the person providing the change, and
  35.     nn is the number of the change made that month (MM) and day (DD).
  36.  
  37. -------------------------------------------------------------------
  38. RBBS-PC.EXE         02-11-90  7:00 PM EST  Release of CPC17.3
  39. --------------------------------------------------------------------
  40.                             Summary
  41.  
  42. EXE   MOD       Short Description
  43. ---- --------   -----------------
  44. CNFG KG082501  Might not find user's file when should
  45. CNFG DA082501  CONFIG now decides where to put user/msg in conf/subboard
  46. RBBS KG082401  Sometimes creating files 0 bytes long
  47. both KG082301  BreakFileName fixed
  48. RBBS ML082001  Text file displayed after door return sometimes not working
  49. CNFG DA082105  Not capitalized macro extension
  50. CNFG DA082104  Getting double extensions added to msg file backup
  51. CNFG DA082103  Apply changed to RBBS-PC's BreakFileName to Config's
  52. RBBS DA082101  BreakFileName subprogram make shorter and clearer
  53. RBBS KG082102  "End Msgs" may be on end of line in T)opic scan
  54. RBBS KG082101  Getting an error when use config to set no caller logging
  55. RBBS KG082005  Erroneous msg logged to callers file when join/door
  56. RBBS KG082004  End of file list prompt made less confusing
  57. RBBS KG082003  Caller log message when exiting conference improved
  58. RBBS KG082002  Newuser file not shown to new users in a subboard
  59. RBBS KG082001  In FMS directory can V)iew file when lack security
  60. RBBS KG081901  Novice prompt too long at end of msg read
  61. RBBS KG081801  Local logon using ESC waits forever for response
  62. RBBS KG081705  Some file names causing problems in join
  63. RBBS KG081704  Category code selected by D)efault sometimes not put in
  64. RBBS KG081703  Possible to get caught in loop in PUI when command invalid
  65. RBBS KG081702  Puts "min left" on same line as subboard/conference name
  66. RBBS KG081701  Corrects spelling in the text
  67. RBBS KG081603  Nested submenus not working intuitively
  68. RBBS KG081602  Not trapping error when can't create callers log
  69. RBBS KG081601  Possible for K)ill to be incorrectly show in msg read
  70. RBBS KG081501  In personal download "p *" gets "unable to access *"
  71. RBBS KG081405  Display improved for reporting mail in conference scan
  72. RBBS KG081404  Possible for info to scroll off in msg scan
  73. CNFG KG081403  Code jumbled in appearance
  74. CNFG KG081402  Help command prefix not being used properly
  75. CNFG KG081401  Initialization of modem commands not consistent
  76. RBBS XX081401  Not executing macro before an external protocol
  77. RBBS KG081303  Restore help at end of message prompt
  78. RBBS KG081302  Support "?" for help at the msg read prompt
  79. RBBS KG081301  "T C" not stacking in utilities section
  80. RBBS KG081201  File search by wildcard not obeying DOS convention
  81. CNFG DA081006  No longer beep when do successful save
  82. CNFG DA081005  Line feed removed from substitution for "{"
  83. CNFG DA081004  Default secret name of SysOp changed
  84. both DA081003  Version # of RBBS shortened by dropping "CPC" prefix
  85. CNFG DA081002  Removes documentation of modem commands in source
  86. CNFG DA081001  Cleans up code displaying page of modems
  87. RBBS DA080903  Mark of new files in personal moved to end of file name
  88. RBBS DA080902  Local status line display sometimes messed up
  89. RBBS DA080901  J)oin option in V)iew not working after a jump
  90. RBBS ML080802  Possible for time shortened and time left to be different
  91. RBBS KG081002  Number of new files reported for new user wrong in subboard
  92. CNFG KG081001  Code shortened and simplified
  93. RBBS KG080905  Display of files in personal sometimes double spaces
  94. CNFG KG080904  Final msg when save in config can be wrong
  95. CNFG KG080903  Code simplified and shortened
  96. CNFG KG080902  Clarify the prompt on exiting config
  97. CNFG KG080901  Move initialization of modem commands to shared routine
  98. RBBS ML080801  Sometimes not dropping to DOS when should
  99. RBBS ML080601  Overwrite on upload not right when file here has diff. extension
  100. CNFG DA080503  Show page of modem options in CONFIG
  101. CNFG DA080502  When initialize firmware, show any modem response
  102. CNFG DA080501  CONFIG sometimes won't work properly with 16550 Uart chip
  103. RBBS KG080701  Possible to get loop in "view conference" command
  104. RBBS KG080601  Change security basis for joining to logon security
  105. RBBS KG080501  Possible in personal msg scan to omit mail from caller
  106. RBBS KG080401  Library section not working right
  107. CNFG KG080301  Code not consistently using standard message for none picked
  108. both KG080101  Allow default extension for compressed files to be empty
  109. RBBS DA080101  Msg when time shortened can be confusing
  110. RBBS KG073104  "v c" after a join inside "v" not working right
  111. CNFG KG073103  Possible to get untrapped error on display of config read
  112. RBBS KGO73102  "R M 1+ C" interpreting "C" as text to search for
  113. RBBS KG073101  User list never displaying user with blank password
  114. RBBS KG073001  Autologoff not working right after insufficient time dwnld
  115. RBBS MB073001  Sometimes password not hidden on logon
  116. CNFG KG072902  Prompt on # seconds to delay before modem cmnd not right
  117. RBBS KG072901  Sometimes not displaying all conferences in V)iew
  118. CNFG KG072802  Not skipping right to next msg on a renumber
  119. CNFG KG072801  Last msg read not reset right after a renumber of msgs
  120. RBBS KG072702  Multi-file uploads skipped after 1st extended description
  121. RBBS KG072701  Strings shortened
  122. RBBS KG072606  Subboard count of new files, new bullets, news wrong
  123. RBBS KG072605  View of block delete in msg edit made L)ist
  124. RBBS KGP72604  Confusing msg when no doors installed
  125. RBBS KG072603  Misleading msg on how to reset profile
  126. CNFG KG072602  Resetting modem commands to default sets times to 0
  127. both KG072601  Upper case converting more than a-z to A-Z
  128. RBBS KG072102  Possible to get untrapped error when FIDXT.DEF empty
  129. RBBS KG072101  Skip over previously viewed conferences in V)iew conf
  130. RBBS DA071803  More appropriate msg when searching non-date sorted FMS dirs
  131. RBBS DA071801  Code shortened and made more consistent
  132. RBBS DA071702  Block of text selected for delete not automatically displayed
  133. RBBS DA071701  Text made shorter, clearer, and more consistent
  134. RBBS ML071502  Sometimes not displaying separate comments file right
  135. RBBS ML071501  Extended description list not working right
  136. RBBS ML062202  Possible to get "(R)(R)" in message subject
  137. RBBS ML062201  Variable not set frequently enough
  138. RBBS ML061905  Do not show To: From: when entering extended description
  139. RBBS ML061904  Moves ques on msg protection after the save
  140. RBBS KG071903  Allow H for a protocol.   Support ? for help in proto choice.
  141. RBBS KG071902  String shortened
  142. RBBS KG071901  When download requests violates security, asks for missing file
  143. RBBS KG071301  Various changes to reduce size of code
  144. RBBS KG071202  "V C" at main menu interpreted as view & leave C)omment
  145. RBBS KG071201  Not always finding macros in drive/path specified
  146. RBBS DA071101  Possible to get erroneous msg that msg base full
  147. RBBS KG071101  Can get msg about expiring registration when shouldn't
  148. RBBS KG071001  Count of new files on logon sometimes not right
  149. RBBS KG070901  Some commands in a stack being ignored
  150. RBBS KG070601  Time/date last logged on sometimes not right in user record
  151. CNFG KG062303  Conference mode header display not right
  152. CNFG KG062302  Not clear in conference mode what user/msg file working on
  153. CNFG KG062301  Need leading space on display of config parameter value
  154. RBBS DA061001  Don't allow duplicate FIRST messages
  155. CNFG DA061001  Set FIRST message to 1.
  156. RBBS DA061002  Continue to convert Smart Text even when user presses key
  157. RBBS DA060901  Allow TAB to be used in LINE EDITOR
  158. RBBS KG061501  Stacked commands wrongly executed during a timelock
  159. RBBS EC061301  Not correctly analyzing all file names
  160. CNFG EC060601  Untrapped error when set required protocol for pers. dwld
  161. RBBS KG061001  Error condition on individuation not handled properly
  162. RBBS KG060903  Person with sysop status not notified of mail to sysop
  163. RBBS KG060902  Msg to public name of sysop says user not found
  164. RBBS KG060901  In msg entry, says will notify even when who to not found
  165. CNFG KG060103  Check wrong for conflict btw individuation & dwnld ratios
  166. RBBS KG060102  Version name of MiteSized version keeps getting longer
  167. RBBS KG060101  Remote sysop name wrongly logged to callers file
  168. RBBS MB052101  Color spilling over into "min left"
  169. RBBS RC050901  Individuation not being restored on return from Doors
  170. RBBS KG052901  Macros sometimes not working in PUI's
  171. RBBS KG052702  Logging to callers file improved in local mode
  172. RBBS KG052701  Time logged on not right in caller's file
  173. RBBS KG052401  RBBS overwrites callers file entry on shell to door
  174. RBBS KG052201  Support info stored in name field but not part of name
  175. RBBS DA042401  Possible to get infinite loop in FMS search
  176. RBBS KG051702  K)ill can be in msg prompt even though can't kill
  177. RBBS TC051701  Join back to main from subboard in V)iew not working
  178. RBBS MB051601  Subject of msg sometimes not prompted for
  179. RBBS KG051501  Subject of msg not treated right when has lower case
  180. RBBS KG042501  Block print in macros not working right
  181. CNFG KG041702  Quote for command symbol messes up DEF file
  182. RBBS KG041701  Doors not getting executed
  183. RBBS ML041401  Infinite loop possible under NetBios
  184. RBBS KG041103  Can get untrapped error when FMS directory not right
  185. CNFG KG041101  Prompt for parameter 158 not clear
  186. RBBS KG040902  Log of file transfers not right when dooring
  187. RBBS KG040901  Not pausing when screen full on directory scans
  188. RBBS KG032801  Macros associated with protocol not being executed
  189. RBBS KG032601  Possible to get untrapped errors when have new user
  190. RBBS KG032502  Adds support for hidden doors not on menu if in DOORS.DEF
  191. RBBS KG032501  Registration door control ignored in DOORS.DEF
  192. RBBS KG031801  Wrong directory sometimes shown
  193. RBBS KG031501  Unable to cancel an upload
  194. RBBS KK030901  Sometimes get overflow error
  195. RBBS KG030801  Stops reporting in personal mail scan after a screen pause
  196. RBBS KG030601  Constant recycling with "Connect Timeout"
  197. CNFG KG030301  Confusing prompt for name of file shown on sec violation
  198. RBBS KG030203  Msg scan reporting personal mail may not pause on full screen
  199. RBBS KG030202  Color spills over into a prompt in personal download
  200. RBBS KG030201  Display of message cannot be paused
  201. RBBS KG030101  Mail V)iew function can show mail waiting wrong in current conf.
  202. RBBS KG022702  Untrapped errors in LIT version with MIMPORT OFF
  203. RBBS KG022701  Stacked commands sometimes not working properly
  204. RBBS RH022501  Autodownload sometimes not reporting name properly
  205. RBBS KG022301  Add support for macro processing for online files
  206. RBBS KG022205  File name reported wiped out by macro processing
  207. RBBS KG022204  Add ability to vary FFS macro processing
  208. RBBS KG022203  Colors graphics door menu MENU05C bleeds on the right
  209. RBBS KG022202  Up and downloads in distributed RBBS-PC.DEF may not work
  210. RBBS KG022201  Jump no longer an option when V)iew in dir listing
  211. RBBS KG022103  LIT merges not assigning new user security right
  212. RBBS KG022102  LIT merges give compile error if SURVEY is OFF
  213. RBBS KG022101  Not correctly tracking bytes downloaded when dooring
  214. RBBS KG022001  Autodownload not working when extension not specified
  215. RBBS KG021803  Macro assign sometimes picks up wrong value
  216. RBBS KG021802  Macros in Fast File Search executed too frequently
  217. RBBS KG021801  Internal code documentation missing some cases
  218. RBBS KG021502  Logon into a conference can pick up a macro
  219. RBBS KG021501  Prompt after end of macro is repeated twice
  220. RBBS RH021501  Autodownload not working
  221.  
  222. Contributors include:
  223.  
  224.     DA - Doug Azzarito
  225.     dd - Daryl Damon
  226.     DR - Dick Reed
  227.     EC - Ezra Conger
  228.     JM - John Morris
  229.     KG - Ken Goosens
  230.     KK - Kim Kodde
  231.     MB - Matthew Briggs
  232.     ML - Mark Lautenschlager
  233.     RC - Richard Couture
  234.     RH - Ray Horton
  235.     TC - Tom Collins
  236.     XX - Unidentified
  237.  
  238. ------------------------[ KG082501 ]-------------------------
  239.  
  240. Problem:  CONFIG not properly looking for user's file.   Question
  241. about whether to create a user's file not put clearly.
  242.  
  243. 25100 CALL BRKFNAME (MAINUSR$,X1$,X2$,X3$,TRUE)                      ' DA082501
  244.       FILE$ = X1$ + CP$ + "U.DEF"                                    ' DA082501
  245.       MAIN.USER.FILE$ = FILE$                                        ' DA082501
  246.       GOSUB 30000                                                    ' DA082501
  247.       IF OKAY THEN _                                                 ' DA082501
  248.          GOTO 25160                                                  ' DA082501
  249.       FILE$ = CP$ + "U.DEF"                                          ' KG082501
  250.       GOSUB 30000                                                    ' DA082501
  251.       IF OKAY THEN _                                                 ' DA082501
  252.          MAIN.USER.FILE$ = FILE$ : _                                 ' DA082501
  253.          GOTO 25160                                                  ' DA082501
  254. 25142 CALL GETNUMYN ("Make a user's file for this conference?",AB)   ' KG082501
  255.       IF AB THEN _
  256.          GOTO 25160
  257.  
  258. ------------------------[ DA082501 ]-------------------------
  259.  
  260. Problem:  SysOps thought that because CONFIG asked where conference
  261. message files are that they could be put anywhere and RBBS should 
  262. find them, whereas normally they would go into the same place as
  263. the main msg and user files.
  264.  
  265. Solution:  Put new msg/user files where RBBS will find them.  Look
  266. where main is as well as in default drive.
  267.  
  268. Solution:  Change CONFIG.BAS as follows:
  269.  
  270. 12160 KEY OFF
  271. '
  272. ' * IF A MESSAGE FILE EXISTS, READ IN THE PARAMETERS IN IT.
  273. '
  274.       FILE$ = MAIN.MESSAGE.FILE$
  275.       GOSUB 30000
  276.       NO.OLD.FILE = FALSE
  277.       IF OKAY THEN _           ' IF MESSAGE FILE EXISTS, READ CHECKPOINT RECORD
  278.          GOTO 12170
  279.       NO.OLD.FILE = TRUE
  280.       A$ = "Message file " + MAIN.MESSAGE.FILE$ + " not found.  Create new one"
  281.       CALL GETNUMYN (A$,AB)
  282.       IF NOT AB THEN _
  283.          IF CONFERENCE.MODE > 0 THEN _                               ' DA082501
  284.             MAIN.MESSAGE.FILE$ = MAINMSG$ : _                        ' DA082501
  285.             MAIN.USER.FILE$ = MAINUSR$ : _                           ' DA082501
  286.             GOTO 12151 _                                             ' DA082501
  287.          ELSE _                                                      ' DA082501
  288.             SYSTEM                                                   ' DA082501
  289.       CALLS.TODATE! = 0                                 ' FIRST MSG#    -- 0
  290.       FIRST.USER.RECORD = 1                             ' USERS file    -- first record number
  291.       CURRENT.USER.COUNT = FIRST.USER.RECORD            ' USERS file    -- next available record number
  292.       HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF   ' USERS file    -- last record number
  293.       FIRST.MESSAGE.RECORD = 2+MAXIMUM.NUMBER.OF.NODES  ' MESSAGES file -- first record of messages
  294.       NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD        ' MESSAGES file -- next available record number
  295.       HIGHEST.MESSAGE.RECORD = 5 * MAX.ALLOWED.MSGS.FRM.DEF _
  296.                                + 1 _
  297.                                + MAXIMUM.NUMBER.OF.NODES ' MESSAGES file -- last record number
  298.       MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF  ' MESSAGES file -- maximum number of messages
  299.       B1 = MAXIMUM.NUMBER.OF.NODES
  300.       B3! = HIGHEST.MESSAGE.RECORD
  301.       GOSUB 22080
  302.       GOSUB 30450                        ' UPDATE CHECKPOINT RECORD
  303.  
  304. 25090 CALL BRKFNAME (MAINMSG$,X1$,X2$,X3$,TRUE)                      ' DA082102
  305.       FILE$ = X1$ + CP$ + "M.DEF"                                    ' DA082102
  306.       MAIN.MESSAGE.FILE$ = FILE$                                     ' DA082501
  307.       GOSUB 30000                                                    ' DA082501
  308.       IF OKAY THEN _                                                 ' DA082501
  309.          GOTO 25100                                                  ' DA082501
  310.       CALL BRKFNAME (CONFERENCE.MENU$,X1$,X2$,X3$,TRUE)              ' DA082501
  311.       FILE$ = X1$ + CP$ + "M.DEF"                                    ' DA082501
  312.       GOSUB 30000                                                    ' DA082501
  313.       IF OKAY THEN _                                                 ' DA082501
  314.          MAIN.MESSAGE.FILE$ = FILE$                                  ' DA082501
  315.  
  316. 25100 CALL BRKFNAME (MAINUSR$,X1$,X2$,X3$,TRUE)                      ' DA082501
  317.       FILE$ = X1$ + CP$ + "U.DEF"                                    ' DA082501
  318.       MAIN.USER.FILE$ = FILE$                                        ' DA082501
  319.       GOSUB 30000                                                    ' DA082501
  320.       IF OKAY THEN _                                                 ' DA082501
  321.          GOTO 25160                                                  ' DA082501
  322.       FILE$ = CP$ + "M.DEF"                                          ' DA082501
  323.       GOSUB 30000                                                    ' DA082501
  324.       IF OKAY THEN _                                                 ' DA082501
  325.          MAIN.USER.FILE$ = FILE$ : _                                 ' DA082501
  326.          GOTO 25160                                                  ' DA082501
  327.  
  328. 25144 CONFERENCE.MODE = 2
  329.       MAIN.USER.FILE$ = MAINUSR$                                     ' DA082501
  330.       GOTO 25170
  331.  
  332. 25160 CONFERENCE.MODE = 1                                            ' DA082501
  333.       UG = 0
  334.  
  335. ------------------------[ KG082401 ]-------------------------
  336.  
  337. Problem:  The assembler routine that is supposed to check for
  338. a file's existence can in some cases create a file with 0 bytes
  339. in it.   Happens if have a bulletin menu with 8 characters in it
  340. when you ask for a bulletin to be displayed.
  341.  
  342. Solution:  Change RBBSSUB4.BAS as follows:
  343.  
  344. 59530 ZWasZ$ = ZUserIn$(ZAnsIndex)
  345.       CALL AllCaps (ZWasZ$)
  346.       IF INSTR(ReturnOn$,ZWasZ$) THEN _  'check whether calling pgm wants
  347.          EXIT SUB
  348.       IF INSTR("LH?",ZWasZ$) THEN _       'check whether caller wants help
  349.          GOTO 59515
  350.       IF INSTR(ZWasZ$,".") > 0 THEN _
  351.          GOTO 59532
  352.       CALL BadFile (ZWasZ$,WasBF)                                    ' KG081705
  353.       IF WasBF > 1 THEN _                                            ' KG081705
  354.          GOTO 59532                                                  ' KG081705
  355.       FPre$ = MenuFront$   ' check for sub-option                    ' KG081603
  356.       CALL BadFile (FPRE$ + ZWasZ$,WasBF)                            ' KG082401
  357.       ZOK = ZFalse                                                   ' KG082401
  358.       IF WasBF < 2 THEN _                                            ' KG082401
  359.          VerifyInMenu = ZFalse : _                                   ' KG082401
  360.          GOSUB 59538                                                 ' KG082401
  361.       VerifyInMenu = PassedVerifyInMenu                              ' KG082005
  362.       IF NOT ZOK THEN _                                              ' KG081603
  363.          FPre$ = FrontOpt$ : _    ' check standard option            ' KG081603
  364.          GOSUB 59538 : _
  365.          IF NOT ZOK THEN _    ' check option where menu is           ' KG081603
  366.             FPre$ = MenuDrv$ : _                                     ' KG081603
  367.             GOSUB 59538
  368.       IF NewMenu THEN _
  369.          NewMenu = ZFalse : _
  370.          GOTO 59515
  371.       IF ZOK THEN _
  372.          EXIT SUB
  373.  
  374. ------------------------[ KG082301 ]-------------------------
  375.  
  376. Problem: Program to break file name into components wrong
  377. sometimes when have only a drive/path, e.g. "C:\TEXT\"
  378. treated as having "TEXT" as file prefix and not part of drive/path.
  379. Also, then not breaking apart to join together, was omitting parts
  380. of drive/path when shouldn't be, such as "a:\" to "a:".
  381.  
  382. Solution:
  383.  
  384. Change RBBSSUB5.BAS as follows:
  385.  
  386. (line 63300)
  387.       SUB BreakFileName (PassedFileSpec$,DrvPath$,Prefix$,Extension$,ForJoining) STATIC ' KG081705
  388.       FileSpec$ = PassedFileSpec$                                    ' KG081705
  389.       CALL AllCaps (FileSpec$)
  390.       DrvPath$ = ""
  391.       Prefix$ = ""
  392.       Extension$ = ""                                                ' KG082301
  393.       WasL = LEN(FileSpec$)
  394.       IF WasL < 1 THEN _
  395.          EXIT SUB
  396.       CALL FindLast (FileSpec$,"\",WasX,WasY)
  397.       IF WasX < 1 THEN _
  398.          IF MID$(FileSpec$,2,1) = ":" THEN _
  399.             DrvPath$ = LEFT$(FileSpec$,2) : _                        ' DA082101
  400.             ZWasS = 3 _
  401.          ELSE ZWasS = 1 _
  402.       ELSE DrvPath$ = LEFT$(FileSpec$,WasX) : _                      ' DA082101
  403.            ZWasS = WasX + 1                                          ' DA082101
  404.       WasX = INSTR(ZWasS,FileSpec$ + ".",".")                        ' EC061301
  405.       IF WasX < WasL THEN _
  406.          Extension$ = MID$(FileSpec$,WasX)                           ' DA082101
  407.       IF ZWasS <= WasL THEN _
  408.          IF WasX >= ZWasS THEN _
  409.             Prefix$ = MID$(FileSpec$,ZWasS,WasX - ZWasS)
  410.       IF ForJoining THEN _                                           ' DA082101
  411.          EXIT SUB
  412.       IF WasY > 1 THEN _                                             ' KG082301
  413.          DrvPath$ = LEFT$(DrvPath$, LEN(DrvPath$) - 1)               ' DA082101
  414.       IF LEN(Extension$) > 0 THEN _
  415.          Extension$ = MID$(Extension$, 2)                            ' DA082101
  416.       END SUB
  417.  
  418. Change CNFG-SUB.BAS as follows:
  419.  
  420. 61830 CALL ALLCAPS (FLNAME$)                                         ' DA082103
  421.       DRVPATH$ = ""
  422.       PREFIX$ = ""
  423.       EXTENSION$ = ""                                                ' KG082301
  424.       L = LEN(FLNAME$)                                               ' DA082103
  425.       IF L < 1 THEN _                                                ' DA082103
  426.          EXIT SUB
  427.       CALL FINDLAST (FLNAME$,"\",X,Y)                                ' DA082103
  428.       IF X < 1 THEN _
  429.          IF MID$(FLNAME$,2,1) = ":" THEN _                           ' DA082103
  430.             DRVPATH$ = LEFT$(FLNAME$, 2): _                          ' DA082101
  431.             S = 3 _
  432.          ELSE S = 1 _
  433.       ELSE DRVPATH$ = LEFT$(FLNAME$,X) : _                           ' DA082101
  434.            S = X + 1
  435.       X = INSTR(FLNAME$+".",".")
  436.       IF X < L THEN _                                                ' DA082103
  437.          EXTENSION$ = MID$(FILENAME$,X)                              ' DA082101
  438.       IF S <= L THEN _                                               ' DA082103
  439.          IF X >= S THEN _                                            ' DA082103
  440.             PREFIX$ = MID$(FLNAME$,S,X - S)                          ' DA082103
  441.       IF FOR.JOINING THEN _                                          ' DA082101
  442.          EXIT SUB
  443.       IF Y > 1 THEN _                                                ' KG082301
  444.          DRVPATH$ = LEFT$(DRVPATH$, LEN(DRVPATH$) - 1)               ' DA082101
  445.       IF LEN(EXTENSION$) > 0 THEN _
  446.          EXTENSION$ = MID$(EXTENSION$, 2)                            ' DA082101
  447.       END SUB
  448.  
  449. ------------------------[ ML082001 ]-------------------------
  450.  
  451. Problem:  DOORS.DEF lets you specify a text file to display after
  452. returning from a door.   The display is erratic and sometimes does
  453. not work properly.
  454.  
  455. Solution:  Read in user's preferences before text displayed.
  456.  
  457. Change RBBS-PC.BAS as follows:
  458.  
  459. 900 ZNewUser = ZFalse
  460.     ActionFlag = (ZLogonMailLevel$ = "S")
  461.     LogonMailNew = (ZLogonMailLevel$ = "N")
  462.     GOSUB 1895
  463.     IF ZActiveUserName$ = "SYSOP" AND NOT ZSysop THEN _
  464.        ZActiveUserName$ = ZOrigUserName$
  465.     LogonMailNew = ZFalse
  466.     ZSubParm = 2
  467.     CALL Line25
  468.     ZSection$ = "    "
  469.     ZOutTxt$ = ""
  470.     IF (NOT ZConfMode) AND (NOT SubBoard) AND NOT TurboLogon THEN _
  471.        MailCheckConfirm = ZTrue : _
  472.        ZNonStop = ZTrue : _
  473.        GOSUB 5800
  474.     MailCheckConfirm = ZFalse
  475.     ZWasQ! = MinsInDoors * 60
  476.     IF ZExitToDoors and ZDooredTo$ <> "" THEN _                      ' ML082001
  477.        CALL BufFile (ZOutTxt$(7),WasX)                               ' ML082001
  478.     ZExitToDoors = ZFalse
  479.     GOSUB 2350
  480.     IF NOT ZPrivateDoor THEN _
  481.        GOTO 955
  482.     GOSUB 20165
  483.     CALL SetSection
  484.     ZPrivateDoor = ZFalse
  485.     GOTO 1205
  486.  
  487. Change RBBSSUB3.BAS as follows:
  488.  
  489. (line 44000)
  490.       SUB ReadProf STATIC
  491.       FIELD 1, 128 AS ZMsgRec$
  492.       GET 1,ZNodeRecIndex
  493.       ZReliableMode = VAL(MID$(ZMsgRec$,91,2))
  494.       MID$(ZMsgRec$,40,2) = "00"
  495.       ZEightBit = VAL(MID$(ZMsgRec$,42,2))
  496.       ZBPS = VAL(MID$(ZMsgRec$,44,2))
  497.       CALL CommInfo
  498.       ZBaudTest! = VAL(MID$(ZBaudRates$,(-5 * ZBPS),5))
  499.       ZUpperCase = VAL(MID$(ZMsgRec$,46,2))
  500.       ZNumDnldBytes! = CVS(MID$(ZMsgRec$,48,4))                      ' KG022101
  501.       ZBatchTransfer = (MID$(ZMsgRec$,52,1) = "1")
  502.       ZWasGR = VAL(MID$(ZMsgRec$,53,2))
  503.       HourLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,65,1))),2),2)
  504.       MinLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,66,1))),2),2)
  505.       SecLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,67,1))),2),2)
  506.       ZTimeLoggedOn$ = HourLoggedOn$ + _
  507.                         ":" + _
  508.                         MinLoggedOn$ + _
  509.                         ":" + _
  510.                         SecLoggedOn$
  511.       ZTransferFunction = VAL(MID$(ZMsgRec$,74,1))
  512.       ZWasFT$ = MID$(ZMsgRec$,75,1)
  513.       ZTimeCredits! = 60!*CVI(MID$(ZMsgRec$,113,2))                  ' KKG030901
  514.       ZDooredTo$ = MID$(ZMsgRec$,79,8)
  515.       CALL Trim (ZDooredTo$)
  516.       IF ZExitToDoors AND ZDooredTo$ <> "" THEN _
  517.          CALL OpenWork (2,ZDoorsDef$) : _
  518.          IF ZErrCode = 0 THEN _
  519.             CALL ReadParms (ZOutTxt$(),8,1) : _
  520.             WHILE ZErrCode = 0 AND ZOutTxt$(1) <> ZDooredTo$ : _
  521.                CALL ReadParms (ZOutTxt$(),8,1) : _
  522.             WEND : _
  523.             IF ZOutTxt$(1) = ZDooredTo$ THEN _
  524.                ZDoorSkipsPswd = (ZOutTxt$(6) <> "Y")                 ' ML082001
  525.       ZErrCode = 0
  526.       ZMenuIndex = VAL(MID$(ZMsgRec$,117,2))
  527.       ZCurPUI$ = MID$(ZMsgRec$,93,8)
  528.       CALL Remove (ZCurPUI$," ")
  529.       IF ZCurPUI$ <> "" THEN _
  530.          CALL BreakFileName (ZMainPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZTrue) : _
  531.          ZCurPUI$ = ZOutTxt$ + ZCurPUI$ + ZWasZ$
  532.       ZCustomPUI = (ZCurPUI$ <> "")
  533.       ZLocalUser = (MID$(ZMsgRec$,101,2) = ZCarriageReturn$ + ZCarriageReturn$) ' KG030601
  534.       ZLocalUserMode = VAL(MID$(ZMsgRec$,103,2))
  535.       ZHomeConf$ = MID$(ZMsgRec$,105,8)
  536.       ZAutoLogoffReq = (VAL(MID$(ZMsgRec$,115,1)) <> 0)
  537.       CALL Trim (ZHomeConf$)
  538.       IF ZRequiredRings > 0 AND _
  539.          INSTR(ZModemInitCmd$,"S0=255") THEN _
  540.          COLOR 7,0,0 _
  541.       ELSE COLOR ZFG,ZBG,ZBorder
  542.       IF ZLocalUserMode THEN _
  543.          GOTO 44003
  544.       CALL SetBaud
  545.  
  546. ------------------------[ DA082105 ]-------------------------
  547.  
  548. Problem:  When enter macro extension in config, not capitalized.
  549.  
  550. Solution:  Change CONFIG.BAS as follows:
  551.  
  552. 15862 A$ = "File extension for macro files (3 chars required)"
  553.       CALL ASKRO (A$,24,MACRO.EXTENSION$)
  554.       IF LEN(MACRO.EXTENSION$) <> 3 THEN _
  555.          GOTO 15862
  556.       CALL ALLCAPS(MACRO.EXTENSION$)                                 ' DA082105
  557.       RETURN
  558.  
  559. ------------------------[ DA082104 ]-------------------------
  560.  
  561. Problem:  When message file has an extension (e.g. DEF), the backup
  562. file names has "BAK" added to the extension.
  563.  
  564. Change CONFIG.BAS as follows:
  565.  
  566. 15460 GOSUB 17340
  567.       MAIN.MESSAGE.FILE$ = HJ$
  568.       CALL BRKFNAME (HJ$,X1$,X2$,X3$,TRUE)                           ' DA082104
  569.       MAIN.MESSAGE.BACKUP$ = X1$ + X2$ + ".BAK"                      ' DA082104
  570.       MAINMSG$ = MAIN.MESSAGE.FILE$
  571.       RETURN
  572.  
  573. ------------------------[ DA082103 ]-------------------------
  574.  
  575. Problem:  Config has a version of program to break file name into
  576. components.  Not updated same as RBBS-PC's.
  577.  
  578. Change CNFG-SUB.BAS as follows:
  579.  
  580. (line 61810)
  581.           .
  582.           .
  583.           .
  584.       SUB BRKFNAME (FILENAME$,DRVPATH$,PREFIX$,EXTENSION$,FOR.JOINING) STATIC
  585.       FLNAME$ = FILENAME$                                            ' DA082103
  586. 61830 CALL ALLCAPS (FLNAME$)                                         ' DA082103
  587.       DRVPATH$ = ""
  588.       PREFIX$ = ""
  589.       EXTENSION$ = ""
  590.       CALL TRIMTRAIL (FLNAME$,"\")                                   ' DA082103
  591.       L = LEN(FLNAME$)                                               ' DA082103
  592.       IF L < 1 THEN _                                                ' DA082103
  593.          EXIT SUB
  594.       CALL FINDLAST (FLNAME$,"\",X,Y)                                ' DA082103
  595.       IF X < 1 THEN _
  596.          IF MID$(FLNAME$,2,1) = ":" THEN _                           ' DA082103
  597.             DRVPATH$ = LEFT$(FLNAME$, 2): _                          ' DA082101
  598.             S = 3 _
  599.          ELSE S = 1 _
  600.       ELSE DRVPATH$ = LEFT$(FLNAME$,X) : _                           ' DA082101
  601.            S = X + 1
  602.       X = INSTR(FLNAME$+".",".")
  603.       IF X < L THEN _                                                ' DA082103
  604.          EXTENSION$ = MID$(FILENAME$,X)                              ' DA082101
  605.       IF S <= L THEN _                                               ' DA082103
  606.          IF X >= S THEN _                                            ' DA082103
  607.             PREFIX$ = MID$(FLNAME$,S,X - S)                          ' DA082103
  608.       IF FOR.JOINING THEN _                                          ' DA082101
  609.          EXIT SUB
  610.       IF LEN(DRVPATH$) > 1 THEN _                                    ' DA082101
  611.          DRVPATH$ = LEFT$(DRVPATH$, LEN(DRVPATH$) - 1)               ' DA082101
  612.       IF LEN(EXTENSION$) > 0 THEN _
  613.          EXTENSION$ = MID$(EXTENSION$, 2)                            ' DA082101
  614.       END SUB
  615.  
  616. ------------------------[ DA082101 ]-------------------------
  617.  
  618. Problem:  Routine to break file name into drive/path, prefix, and
  619. extension is confusing, especially on when to add "\".
  620.  
  621. Change RBBSSUB5.BAS as follows:
  622.  
  623. 63300 ' $SUBTITLE: 'BreakFileName - sub to split file name into components'
  624. ' $PAGE
  625. '
  626. '  NAME    -- BreakFileName
  627. '
  628. '  INPUTS  -- PARAMETER                    MEANING
  629. '             FileSpec$        FULL NAME OF FILE
  630. '             ForJoining       True IF WANT PARTS FORMATTED FOR
  631. '                                           FORMING FILE NAMES
  632. '  OUTPUTS -- DrvPath$         DRIVE AND PATH
  633. '             Prefix$          PREFIX OF FILE NAME
  634. '             Extension$       EXTENSION OF FILE NAME
  635. '
  636. ' (E.G. "C:\RBBS\ARCE.COM" HAS "C:\RBBS" AS DRIVE AND PATH,
  637. '                              "ARCE"    AS PREFIX OF THE FILE NAME, AND
  638. '                              "COM"     AS THE EXTENSION OF THE FILE NAME.
  639. '
  640. ' JOINED FORMAT IS C:\RBBS\,ARCE,.COM
  641. '
  642. '  PURPOSE -- To break a file name into its component parts
  643. '             of drive/path, prefix, and extension
  644. '
  645. '
  646.       SUB BreakFileName (PassedFileSpec$,DrvPath$,Prefix$,Extension$,ForJoining) STATIC ' KG081705
  647.       FileSpec$ = PassedFileSpec$                                    ' KG081705
  648.       CALL AllCaps (FileSpec$)
  649.       DrvPath$ = ""
  650.       Prefix$ = ""
  651.       Extension$ = ""
  652.       CALL TrimTrail (FileSpec$,"\")
  653.       WasL = LEN(FileSpec$)
  654.       IF WasL < 1 THEN _
  655.          EXIT SUB
  656.       CALL FindLast (FileSpec$,"\",WasX,WasY)
  657.       IF WasX < 1 THEN _
  658.          IF MID$(FileSpec$,2,1) = ":" THEN _
  659.             DrvPath$ = LEFT$(FileSpec$,2) : _                        ' DA082101
  660.             ZWasS = 3 _
  661.          ELSE ZWasS = 1 _
  662.       ELSE DrvPath$ = LEFT$(FileSpec$,WasX) : _                      ' DA082101
  663.            ZWasS = WasX + 1                                          ' DA082101
  664.       WasX = INSTR(ZWasS,FileSpec$ + ".",".")                        ' EC061301
  665.       IF WasX < WasL THEN _
  666.          Extension$ = MID$(FileSpec$,WasX)                           ' DA082101
  667.       IF ZWasS <= WasL THEN _
  668.          IF WasX >= ZWasS THEN _
  669.             Prefix$ = MID$(FileSpec$,ZWasS,WasX - ZWasS)
  670.       IF ForJoining THEN _                                           ' DA082101
  671.          EXIT SUB
  672.       IF LEN(DrvPath$) > 1 THEN _
  673.          DrvPath$ = LEFT$(DrvPath$, LEN(DrvPath$) - 1)               ' DA082101
  674.       IF LEN(Extension$) > 0 THEN _
  675.          Extension$ = MID$(Extension$, 2)                            ' DA082101
  676.       END SUB
  677.  
  678. ------------------------[ KG082102 ]-------------------------
  679.  
  680. Problem:  The "End Msgs" may fail to be at the beginning of
  681. a line in a topic scan, instead getting appended to the right
  682. of a topic.
  683.  
  684. Solution:  Change RBBS-PC.BAS as follows:
  685.  
  686. 4650 CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                        ' KG081404
  687.      CALL SkipLine (1)                                               ' KG082102
  688.      CALL QuickTPut1 ("--End Msgs--")                                ' KG081404
  689.      RETURN
  690.  
  691. ------------------------[ KG082101 ]-------------------------
  692.  
  693. Problem:  When use CONFIG to set caller's file in a subboard,
  694. and specify a drive/path with a path but answer No to the
  695. question whether want to log to a caller's file, get fatal
  696. error when try to join that subboard.
  697.  
  698. Solution:  Change RBBSSUB5.BAS as follows:
  699.  
  700. (line 63300)
  701.       SUB BreakFileName (PassedFileSpec$,DrvPath$,Prefix$,Extension$,ForJoining) STATIC ' KG081705
  702.       FileSpec$ = PassedFileSpec$                                    ' KG081705
  703.       CALL AllCaps (FileSpec$)
  704.       DrvPath$ = ""
  705.       Prefix$ = ""
  706.       Extension$ = ""
  707.       WasL = INSTR(FileSpec$,"\\")                                   ' KG082101
  708.       IF WasL > 0 THEN _                                             ' KG082101
  709.          FileSpec$ = LEFT$(FileSpec$,WasL)                           ' KG082101
  710.       WasL = LEN(FileSpec$)
  711.       IF WasL < 1 THEN _
  712.          EXIT SUB
  713.       CALL FindLast (FileSpec$,"\",WasX,WasY)
  714.       IF WasX < 1 THEN _
  715.          IF MID$(FileSpec$,2,1) = ":" THEN _
  716.             DrvPath$ = LEFT$(FileSpec$,1) : _
  717.             ZWasS = 3 _
  718.          ELSE ZWasS = 1 _
  719.       ELSE DrvPath$ = LEFT$(FileSpec$,WasX-1) : _
  720.            ZWasS = WasX + 1 : _
  721.            IF WasY = 1 THEN _
  722.               DrvPath$ = DrvPath$ + "\"
  723.       WasX = INSTR(ZWasS,FileSpec$ + ".",".")                        ' EC061301
  724.       IF WasX < WasL THEN _
  725.          Extension$ = MID$(FileSpec$,WasX + 1)
  726.       IF ZWasS <= WasL THEN _
  727.          IF WasX >= ZWasS THEN _
  728.             Prefix$ = MID$(FileSpec$,ZWasS,WasX - ZWasS)
  729.       IF NOT ForJoining THEN _
  730.          EXIT SUB
  731.       IF LEN(DrvPath$) = 1 THEN _
  732.          IF DrvPath$ <> "\" THEN _
  733.             DrvPath$ = DrvPath$ + _
  734.                        ":"
  735.       IF INSTR(DrvPath$,"\") > 0 AND RIGHT$(DrvPath$,1) <> "\" THEN _
  736.          DrvPath$ = DrvPath$ + _
  737.                     "\"
  738.       IF LEN(Extension$) > 0 THEN _
  739.          Extension$ = "." + _
  740.                       Extension$
  741.       END SUB
  742.  
  743. ------------------------[ KG082005 ]-------------------------
  744.  
  745. Problem:  Can get message logged to callers file that an option
  746. was found on menu but not found (on disk) when joining a conference
  747. or dooring, but actually did find conference or door.
  748.  
  749. Solution:  Change RBBSSUB4.BAS as follows:
  750.  
  751. (line 59500)
  752.       SUB SubMenu (PassedPrompt$,CurMenu$,FrontOpt$, _
  753.                   BackOpt$,ReturnOn$,GRDefault$,PassedVerifyInMenu, _' KG082005
  754.                   AllMenuOK,RequireInMenu,BackOpt2$,InMenu) STATIC   ' KG032502
  755.  
  756. 59530 ZWasZ$ = ZUserIn$(ZAnsIndex)
  757.       CALL AllCaps (ZWasZ$)
  758.       IF INSTR(ReturnOn$,ZWasZ$) THEN _  'check whether calling pgm wants
  759.          EXIT SUB
  760.       IF INSTR("LH?",ZWasZ$) THEN _       'check whether caller wants help
  761.          GOTO 59515
  762.       IF INSTR(ZWasZ$,".") > 0 THEN _
  763.          GOTO 59532
  764.       CALL BadFile (ZWasZ$,WasBF)                                    ' KG081705
  765.       IF WasBF > 1 THEN _                                            ' KG081705
  766.          GOTO 59532                                                  ' KG081705
  767.       FPre$ = MenuFront$   ' check for sub-option                    ' KG081603
  768.       VerifyInMenu = ZFalse                                          ' KG082005
  769.       GOSUB 59538
  770.       VerifyInMenu = PassedVerifyInMenu                              ' KG082005
  771.       IF NOT ZOK THEN _                                              ' KG081603
  772.          FPre$ = FrontOpt$ : _    ' check standard option            ' KG081603
  773.          GOSUB 59538 : _
  774.          IF NOT ZOK THEN _    ' check option where menu is           ' KG081603
  775.             FPre$ = MenuDrv$ : _                                     ' KG081603
  776.             GOSUB 59538
  777.       IF NewMenu THEN _
  778.          NewMenu = ZFalse : _
  779.          GOTO 59515
  780.       IF ZOK THEN _
  781.          EXIT SUB
  782.  
  783. 59540 WasX$ = FPre$ + _
  784.            ZWasZ$ + _
  785.            ".MNU" 'check whether option is a menu
  786.       ZFileName$ = WasX$
  787.       CALL Graphic (GRDefault$,ZFileName$)
  788.       IF ZOK THEN _
  789.          NewMenu = ZTrue : _
  790.          CurMenuVer$ = ZFileName$ : _
  791.          CurMenu$ = WasX$ : _
  792.          CALL BreakFileName (CurMenu$,MenuDrv$,WasX$,ZWasDF$,ZTrue) : _
  793.          MenuFront$ = MenuDrv$ + WasX$                               ' KG082005
  794.       RETURN
  795. 59547 CALL QuickTPut1 ("No such option " + ZWasZ$)
  796.       ZLastIndex = 0
  797.       IF VerifyInMenu AND InMenu AND NOT RequireInMenu THEN _        ' KG082005
  798.          CALL UpdtCalr("Option " + ZWasZ$ + " on menu " + _          ' KG082005
  799.                        CurMenu$ + " but not found",1)                ' KG082005
  800.       RETURN
  801.  
  802. ------------------------[ KG082004 ]-------------------------
  803.  
  804. Problem:  The "End list... download what?" prompt invites the
  805. response "d file1 ... ".   Better to say "file(s) to download"
  806. and more consistent with prompt elsewhere.
  807.  
  808. Solution:  Change RBBSSUB5.BAS as follows:
  809.  
  810. 20159 IF ZAnsIndex < ZLastIndex THEN _
  811.          GOTO 20155
  812.       ZSearchingAll = ZFalse
  813.       CALL CmdStackPushPop (1)
  814.       ZLastIndex = 0
  815.       IF ZNo OR (ZFileNameHold$ = ZDirPrefix$) THEN _
  816.          GOTO 20155
  817.       CALL QuickTPut (ZEmphasizeOff$,0)
  818.       ZOutTxt$ = "End list.  R)elist, [Q]uit, or file(s) to dwnld"   ' KG082004
  819.       ZStackC = ZTrue
  820.       GOSUB 21668
  821.       CALL AllCaps (ZUserIn$(1))
  822.       IF ZUserIn$(1) = "R" THEN _
  823.          ZUserIn$(ZAnsIndex) = WasA1$ : _
  824.          GOTO 20161
  825.       IF LEN(ZUserIn$(1)) > 1 AND _
  826.          ZUserSecLevel >= ZOptSec(19 - 20 * (ZMenuIndex = 6)) THEN _
  827.          ZAnsIndex = 1 : _
  828.          GOSUB 20202
  829.       CALL CmdStackPushPop (2)
  830.       RETURN
  831.  
  832. ------------------------[ KG082003 ]-------------------------
  833.  
  834. Problem:  Called log distinguishes conference and subboard and
  835. logs name when enter.   But on exit says only "Exited Conference".
  836.  
  837. Solution:  Make exit message consistent with entry.  Change
  838. RBBS-PC.BAS as follows:
  839.  
  840. 5350 IF ZConfName$ <> "MAIN" THEN _
  841.         CALL QuickTPut1 ("Rejoining " + OrigMsgName$)                ' KG082003
  842.      ConfFileName$ = OrigMsgName$
  843.      ZNewsFileName$ = OrigNewsFileName$
  844.      TurboLogon = ZTrue
  845.      ZWasQ = 0
  846.      ZInConfMenu = ZTrue
  847.      IF ZActiveUserName$ = "SYSOP" THEN _
  848.         ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ : _
  849.         CALL Trim (ZActiveUserName$)
  850.      ZConfigFileName$ = ZOrigCnfg$
  851.      CALL ReadDef (ZConfigFileName$)
  852.      IF ZOrigMsgFile$ <> ZActiveMessageFile$ THEN _
  853.         ZActiveMessageFile$ = ZOrigMsgFile$ : _
  854.         GOSUB 5343
  855.      IF ZOrigUserFile$ <> ZActiveUserFile$ THEN _
  856.         GOSUB 5380 : _
  857.         ZActiveUserFile$ = ZOrigUserFile$ : _
  858.         ZActiveUserName$ = ZOrigUserName$ : _
  859.         GOSUB 12598 : _
  860.         GOSUB 12990 : _
  861.         IF Found THEN _
  862.            GOSUB 9500 : _
  863.            ZMainUserFileIndex = ZUserFileIndex : _
  864.            CALL SetPrompt : _
  865.            CALL XferType (2,ZTrue) _
  866.         ELSE ZUserFileIndex = 0 : _
  867.              ZMainUserFileIndex = 0
  868.      CALL UpdtCalr ("Exited " + ZConfName$,2)                        ' KG082003
  869.      ZConfName$ = "MAIN"                                             ' KG082003
  870.      GOSUB 2350
  871.      ZUplds = ZGlobalUplds
  872.      ZDnlds = ZGlobalDnlds
  873.      ZDLToday! = ZGlobalDLToday!
  874.      ZBytesToday! = ZGlobalBytesToday!
  875.      ZDLBytes! = ZGlobalDLBytes!
  876.      ZULBytes! = ZGlobalULBytes!
  877.  
  878. ------------------------[ KG082002 ]-------------------------
  879.  
  880. Problem:  New user file in a subboard never being shown to new users.
  881.  
  882. Solution:  Change RBBS-PC.BAS as follows:
  883.  
  884. 178 IF NOT SubBoard THEN _                                           ' KG082002
  885.        RETURN                                                        ' KG082002
  886.     IF ZNewUser THEN _                                               ' KG082002
  887.        GOSUB 758                                                     ' KG082002
  888.     IF ZFirstName$ = ZSysopFirstName$ AND _
  889.        ZLastName$ = ZSysopLastName$ THEN _
  890.           RETURN 832 _
  891.     ELSE RETURN 790                                                  ' KG082002
  892.  
  893. 735 ZBypassTimeCheck = ZTrue
  894.     GOSUB 758                                                        ' KG082002
  895.  
  896. 755 IF ZPrivateDoor THEN _
  897.        ZUserIn$ = ZPswd$ : _
  898.        ZWasZ$ = ZUserIn$ : _
  899.        RETURN
  900.     GOSUB 12800
  901.     ZOutTxt$ = "Re-Enter password for Verification"                  ' DA071701
  902.     GOSUB 45010
  903.     SWAP ZWasZ$,ZUserIn$
  904.     CALL AllCaps (ZWasZ$)
  905.     IF ZUserIn$ <> ZWasZ$ THEN _
  906.        CALL QuickTPut1 ("Passwords Don't Match!") : _
  907.        GOTO 755
  908.     RETURN                                                           ' KG082002
  909. 758 CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                         ' KG082002
  910.     CALL Line25
  911.     ZFileName$ = ZNewUserFile$
  912.     ZStopInterrupts = ZTrue
  913.     GOSUB 1790
  914.     CALL SkipLine(1)
  915.     RETURN                                                           ' KG082002
  916.  
  917. ------------------------[ KG082001 ]-------------------------
  918.  
  919. Problem:  When lack security to execute v)iew files command, still
  920. see and can execute V)iew inside FMS listing.
  921.  
  922. Solution:  Change RBBSSUB3.BAS as follows:
  923.  
  924. (line 58165)
  925.       SUB DispUpDir (PassedCats$,SearchString$, _
  926.                     SearchDate$,DnldFlag,AbortIndex) STATIC
  927.       CALL AllCaps (SearchString$)
  928.       Blank$ = " "
  929.       ZStopInterrupts = ZFalse
  930.       ZLastIndex = 0
  931.       Categories$ = "," + _
  932.                     PassedCats$ + _
  933.                     ","
  934.       CanDnld = (ZUserSecLevel => ZOptSec(19))
  935.       CanView = (ZUserSecLevel => ZOptSec(26))                       ' KG082001
  936.       ZJumpSupported = ZTrue
  937.       ZJumpSearching = ZFalse
  938.       GOSUB 58185
  939.       IF DnldFlag > 0 THEN _
  940.          UpldIndex = DnldFlag : _
  941.          DnldFlag = 0 : _
  942.          GOTO 58180
  943.       ZJumpLast$ = ""
  944.       SearchFor$ = SearchString$
  945.       ExtraPrompt$ = LEFT$(",V)iew",-(6+4*ZExpertUser)*CanView)      ' KG082001
  946.       IF CanDnld THEN _
  947.          IF ZTurboKeyUser THEN _
  948.             ExtraPrompt$ = ExtraPrompt$ + ",D)ownload" _
  949.          ELSE ExtraPrompt$ = ExtraPrompt$ + ", file(s) to dwnld"
  950.       MaxPrint = ZPageLength - 1
  951.       BelowMinSec = (ZUserSecLevel < ZMinSecToView)
  952.       ZNonStop = ZNonStop OR (ZPageLength < 1)
  953.       FMSCheckPoint = 0
  954.       WildSearch = (INSTR(SearchString$,"?") > 0) _
  955.                      OR (INSTR(SearchString$,"*") > 0)
  956.  
  957. 58180 ZTurboKey = -ZTurboKeyUser
  958.       ZStackC = ZTrue
  959.       CALL AskMore (ExtraPrompt$, ZTrue, ZFalse,AbortIndex,ZFalse)
  960.       IF ZSubParm = -1 THEN _
  961.          GOTO 58183
  962.       IF ZNo THEN _
  963.          GOTO 58183
  964.       CALL AllCaps (ZUserIn$(1))
  965.       IF ZUserIn$(1) = "V" THEN IF CanView THEN _                    ' KG082001
  966.          ZLastIndex = ZWasQ : _
  967.          ZAnsIndex = 1 : _
  968.          CALL GetArc : _
  969.          ZJumpSupported = ZTrue : _                                  ' KG022201
  970.          ZWasA = UpldIndex : _
  971.          GOSUB 58185 : _
  972.          UpldIndex = ZWasA : _
  973.          GOTO 58180
  974.       IF ZUserIn$(1) = "D" THEN IF CanDwld THEN _                    ' KG082001
  975.          ZOutTxt$ = "Download what file(s)" : _
  976.          ZStackC = ZTrue : _
  977.          CALL PopCmdStack : _
  978.          IF ZWasQ = 0 THEN _
  979.             GOTO 58180
  980.       IF ZJumpSearching THEN _
  981.          PrevSearch$ = SearchFor$ : _
  982.          SearchFor$ = ZJumpTo$ _
  983.       ELSE SearchFor$ = SearchString$ : _
  984.            IF LEN(ZUserIn$(1)) > 1 THEN _
  985.            IF NOT ZYes AND CanDnld THEN _
  986.               CALL SkipLine (1) : _
  987.               DnldFlag = UpldIndex : _
  988.               ZLastIndex = ZWasQ : _
  989.               ZAnsIndex = 1 : _
  990.               EXIT SUB
  991.       IF ZNonStop THEN IF UpldIndex > 999 THEN _
  992.          IF (SearchDate$ = "" OR NOT ZExpertUser) THEN _
  993.             ZOutTxt$ = STR$(UpldIndex) + _
  994.                " lines left to search.  Really go non-stop? (Y/[N])" : _
  995.             ZNoAdvance = ZTrue : _
  996.             ZTurboKey = -ZTurboKeyUser : _
  997.             ZSubParm = 1 : _
  998.             CALL TGet : _
  999.             CALL WipeLine (79) : _
  1000.             ZNonStop = ZYes                                          ' DA071803
  1001.       GOTO 58168
  1002.  
  1003. ------------------------[ KG081901 ]-------------------------
  1004.  
  1005. Problem:  in novice mode the read prompt is longer than a line.
  1006.  
  1007. Change RBBS-PC.BAS as follows:
  1008.  
  1009. 4601   WasA1$ = ",H)lp,R)eply,T)hread,=,+,-" + _                     ' KG081901
  1010.                 MID$(",F)wd",1, - (UserInHeader OR CanChangeSec) * 5) + _
  1011.                 MID$(",K)ill",1, ShowKill * 6) + _                   ' KG081601
  1012.                 MID$(",U)sr",1,- (ZUserSecLevel >= ZOptSec(54)) * 6) + _ ' KG081303
  1013.                 MID$(",S)ec",1, - CanChangeSec * 5)
  1014.  
  1015. ------------------------[ DR081801 ]-------------------------
  1016.  
  1017. Problem:  When use ESC to log on locally, RBBS will not time out
  1018. for input on user name.   Not desirable since distracted SysOp can
  1019. unintentionally tie up a working node, and might be using ESC to get
  1020. on as regular user on a network.
  1021.  
  1022. Change RBBS-PC.BAS as follows:
  1023.  
  1024. 822 LOCATE 24,1
  1025.     CALL TakeOffHook
  1026.     ZLocalUser = ZTrue
  1027.     ZSnoop = ZTrue
  1028.     ZSysop = ZTrue                                                   ' DR081801
  1029.     ZBPS = -6
  1030.     CALL CommInfo
  1031.     CALL Muzak (2)
  1032.     IF NOT ZEscapeInsecure THEN _
  1033.        GOTO 345
  1034.     ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$
  1035.     ZFirstName$ = ZSysopPswd1$
  1036.     ZLastName$ = ZSysopPswd2$
  1037.     ZUserLogonTime! = TIMER
  1038.     ZTimeLoggedOn$ = TIME$
  1039.     ZLinesPrinted = 0
  1040.     GOTO 457
  1041.  
  1042. ------------------------[ KG081705 ]-------------------------
  1043.  
  1044. Problem:  Some file names cause a problem in conference join, such
  1045. as "\".
  1046.  
  1047. Solution: (fix to a fix)  Change RBBSSUB4.BAS as follows:
  1048.  
  1049. 59530 ZWasZ$ = ZUserIn$(ZAnsIndex)
  1050.       CALL AllCaps (ZWasZ$)
  1051.       IF INSTR(ReturnOn$,ZWasZ$) THEN _  'check whether calling pgm wants
  1052.          EXIT SUB
  1053.       IF INSTR("LH?",ZWasZ$) THEN _       'check whether caller wants help
  1054.          GOTO 59515
  1055.       IF INSTR(ZWasZ$,".") > 0 THEN _
  1056.          GOTO 59532
  1057.       CALL BadFile (ZWasZ$,WasBF)                                    ' KG081705
  1058.       IF WasBF > 1 THEN _                                            ' KG081705
  1059.          GOTO 59532                                                  ' KG081705
  1060.       FPre$ = MenuFront$   ' check for sub-option                    ' KG081603
  1061.       GOSUB 59538
  1062.       IF NOT ZOK THEN _                                              ' KG081603
  1063.          FPre$ = FrontOpt$ : _    ' check standard option            ' KG081603
  1064.          GOSUB 59538 : _
  1065.          IF NOT ZOK THEN _    ' check option where menu is           ' KG081603
  1066.             FPre$ = MenuDrv$ : _                                     ' KG081603
  1067.             GOSUB 59538
  1068.       IF NewMenu THEN _
  1069.          NewMenu = ZFalse : _
  1070.          GOTO 59515
  1071.       IF ZOK THEN _
  1072.          EXIT SUB
  1073.  
  1074. 59538 FilName$ = FPre$ + ZWasZ$                                      ' KG081705
  1075.       ZFileName$ = FilName$ + _
  1076.                    BackOpt$
  1077.       CALL Graphic (GRDefault$,ZFileName$)
  1078.       IF NOT ZOK THEN _
  1079.          IF BackOpt2$ <> "" THEN _
  1080.             ZFileName$ = FilName$ + _
  1081.                          BackOpt2$ : _
  1082.             CALL Graphic (GRDefault$,ZFileName$)
  1083.       IF ZOK THEN _
  1084.          IF ZSysop OR (NOT RequireInMenu) THEN _
  1085.             RETURN _
  1086.          ELSE CALL WordInFile (CurMenu$,ZWasZ$,InMenu) : _           ' KG032502
  1087.               IF InMenu THEN _                                       ' KG032502
  1088.                  RETURN _
  1089.               ELSE GOTO 59540
  1090.       IF (NOT VerifyInMenu) THEN _
  1091.          GOTO 59540
  1092.       CALL WordInFile (CurMenu$,ZWasZ$,InMenu)  'verify against menu itself ' KG032502
  1093.       IF InMenu THEN _                                               ' KG032502
  1094.          IF AllMenuOK THEN _
  1095.             RETURN
  1096.  
  1097. Change RBBSSUB5.BAS as follows:
  1098.  
  1099.       SUB BreakFileName (PassedFileSpec$,DrvPath$,Prefix$,Extension$,ForJoining) STATIC ' KG081705
  1100.       FileSpec$ = PassedFileSpec$                                    ' KG081705
  1101.       CALL AllCaps (FileSpec$)
  1102.       DrvPath$ = ""
  1103.       Prefix$ = ""
  1104.       Extension$ = ""
  1105.       CALL TrimTrail (FileSpec$,"\")
  1106.       WasL = LEN(FileSpec$)
  1107.       IF WasL < 1 THEN _
  1108.          EXIT SUB
  1109.       CALL FindLast (FileSpec$,"\",WasX,WasY)
  1110.       IF WasX < 1 THEN _
  1111.          IF MID$(FileSpec$,2,1) = ":" THEN _
  1112.             DrvPath$ = LEFT$(FileSpec$,1) : _
  1113.             ZWasS = 3 _
  1114.          ELSE ZWasS = 1 _
  1115.       ELSE DrvPath$ = LEFT$(FileSpec$,WasX-1) : _
  1116.            ZWasS = WasX + 1 : _
  1117.            IF WasY = 1 THEN _
  1118.               DrvPath$ = DrvPath$ + "\"
  1119.       WasX = INSTR(ZWasS,FileSpec$ + ".",".")                        ' EC061301
  1120.       IF WasX < WasL THEN _
  1121.          Extension$ = MID$(FileSpec$,WasX + 1)
  1122.       IF ZWasS <= WasL THEN _
  1123.          IF WasX >= ZWasS THEN _
  1124.             Prefix$ = MID$(FileSpec$,ZWasS,WasX - ZWasS)
  1125.       IF NOT ForJoining THEN _
  1126.          EXIT SUB
  1127.       IF LEN(DrvPath$) = 1 THEN _
  1128.          IF DrvPath$ <> "\" THEN _
  1129.             DrvPath$ = DrvPath$ + _
  1130.                        ":"
  1131.       IF INSTR(DrvPath$,"\") > 0 AND RIGHT$(DrvPath$,1) <> "\" THEN _
  1132.          DrvPath$ = DrvPath$ + _
  1133.                     "\"
  1134.       IF LEN(Extension$) > 0 THEN _
  1135.          Extension$ = "." + _
  1136.                       Extension$
  1137.       END SUB
  1138.  
  1139. ------------------------[ KG081704 ]-------------------------
  1140.  
  1141. Problem:   When classifying an upload and select D)efault, sometimes
  1142. gets blanks rather than the category specified in CONFIG.
  1143.  
  1144. Solution:  Change RBBSSUB3.BAS as follows:
  1145.  
  1146. 20720 ZOutTxt$= "Upload best fits what category (D=default,H=help)"
  1147.       ZSubParm = 1
  1148.       CALL TGet
  1149.       CALL AllCaps (ZUserIn$(1))
  1150.       IF ZSubParm = -1 OR ZUserIn$(1) = "D" THEN _
  1151.          UCat$ = ZDefaultCatCode$ : _                                ' KG071704
  1152.          GOTO 20722
  1153.       IF ZWasQ = 0 THEN _
  1154.          GOTO 20719
  1155.       IF ZUserIn$(1) = "H" OR _
  1156.          ZUserIn$(1) = "*" OR _
  1157.          ZUserIn$(1) = "?" THEN _
  1158.          GOTO 20719
  1159.       CALL SearchArray (ZUserIn$(1),ZCategoryName$(),ZNumCategories,Found)
  1160.       IF Found > 0 THEN _
  1161.          UCat$ = ZCategoryCode$(Found) : _
  1162.          IF LEN(UCat$) > 0 AND LEN(UCat$) < 4 AND INSTR(UCat$,",") = 0 THEN _
  1163.             GOTO 20722
  1164.       UCat$ = ""
  1165.       IF NOT ZLimitSearchToFMS THEN _
  1166.          StrewTo$ = ZDirPath$ + _
  1167.                      ZUserIn$(1) + _
  1168.                      "." + _
  1169.                      ZDirExtension$ : _
  1170.          CALL FindIt (StrewTo$) : _
  1171.          IF ZOK THEN _
  1172.             GOTO 20722 _
  1173.          ELSE CALL WordInFile (ZUpcatHelp$,ZUserIn$(1),ZOK) : _
  1174.               IF ZOK THEN _
  1175.                  GOTO 20722
  1176.       StrewTo$ = ""
  1177.       CALL QuickTPut1 ("No such category " + ZUserIn$(1))
  1178.       GOTO 20719
  1179.  
  1180. ------------------------[ KG081703 ]-------------------------
  1181.  
  1182. Problem:  When using Programmable User Interface, possible to
  1183. get in an infinite loop with a self-reinvoking macro.
  1184.  
  1185. Solution:  Change RBBSSUB4.BAS as follows:
  1186.  
  1187. 59492 CALL QuickTPut1 ("No such option <" + ZWasZ$ + ">")            ' DA071701
  1188.       Call FlushKeys                                                 ' KG081703
  1189.       GOTO 59460
  1190.       END SUB
  1191.  
  1192. ------------------------[ KG081702 ]-------------------------
  1193.  
  1194. Problem:  RBBS puts the min left on a line by itself and then
  1195. the conference name on another line by itself.   Waste of line
  1196. space and looks bad.
  1197.  
  1198. Solution:  put the min left after the conference name.   In
  1199. main, will just show min left.   Also, add comments to clarify code.
  1200.  
  1201. Change RBBS-PC.BAS as follows:
  1202.  
  1203. 1210 GOSUB 41000
  1204.      IF ZAnsIndex < ZLastIndex THEN _
  1205.         GOTO 1232
  1206.      CALL Talk (10,ZOutTxt$)
  1207.      CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                        ' KG081702
  1208.      IF ZExpertUser THEN _
  1209.         GOTO 1230
  1210.  
  1211. 1230 CALL Line25                                                     ' KG081404
  1212.      IF ZConfMode THEN _
  1213.         ZOutTxt$ = ZConfName$ + ":" : _                              ' KG081702
  1214.         GOSUB 12978 : _                                              ' KG081702
  1215.         CALL Talk (65,ZConfName$)
  1216.      CALL DispTimeRemain (MinsRemaining)                             ' KG081702
  1217.      IF ZMenuIndex = 6 THEN _
  1218.         ZSubParm = 1 : _
  1219.         CALL Library
  1220.      CALL Talk (ZMenuIndex, ZOutTxt$)
  1221.  
  1222. 12978 ZSubParm = 4     ' no cr/lf                                    ' KG081702
  1223.       GOTO 12981
  1224. 12979 ZSubParm = 5     ' cr/lf                                       ' KG081702
  1225.       GOTO 12981
  1226.  
  1227. ------------------------[ KG081701 ]-------------------------
  1228.  
  1229. Problem:  In a text message "transfer" is spelled "tranfer".
  1230.  
  1231. Solution:  Change RBBSSUB5.BAS as follows:
  1232.  
  1233. 20745 ZOutTxt$ = ZXOff$ + _
  1234.            "SYSOP aborted upload. Stop transfer. <Ctrl-K> continues" ' KG081701
  1235.       GOTO 20675
  1236.  
  1237. ------------------------[ KG081603 ]-------------------------
  1238.  
  1239. Problem:  Nested submenus in RBBS keep adding the response to
  1240. the menu name.   This allows menus with the same range of
  1241. responses.   However, in bulletins, the submenu choice may invoke
  1242. an earlier menu rather than the outer menu.   This happens because
  1243. RBBS checks for a choice with original prefix + answer before the
  1244. outer menu.   Thus, if prefix is B and in menu A (BA.MNU) and
  1245. enter choice A, will get same menu back (prefix + answer) rather
  1246. than submenu off of BA (BAA.MNU).
  1247.   Note: this problem causes the example of submenus in the
  1248. documentation not to work right.
  1249.  
  1250. Solution:  Check for nested submenu 1st, then for prefix, rather
  1251. than other way around.
  1252.  
  1253. Change RBBSSUB4.BAS as follows:
  1254.  
  1255. 59530 ZWasZ$ = ZUserIn$(ZAnsIndex)
  1256.       CALL AllCaps (ZWasZ$)
  1257.       IF INSTR(ReturnOn$,ZWasZ$) THEN _  'check whether calling pgm wants
  1258.          EXIT SUB
  1259.       IF INSTR("LH?",ZWasZ$) THEN _       'check whether caller wants help
  1260.          GOTO 59515
  1261.       IF INSTR(ZWasZ$,".") > 0 THEN _
  1262.          GOTO 59532
  1263.       FPre$ = MenuFront$   ' check for sub-option                    ' KG081603
  1264.       GOSUB 59538
  1265.       IF NOT ZOK THEN _                                              ' KG081603
  1266.          FPre$ = FrontOpt$ : _    ' check standard option            ' KG081603
  1267.          GOSUB 59538 : _
  1268.          IF NOT ZOK THEN _    ' check option where menu is           ' KG081603
  1269.             FPre$ = MenuDrv$ : _                                     ' KG081603
  1270.             GOSUB 59538
  1271.       IF NewMenu THEN _
  1272.          NewMenu = ZFalse : _
  1273.          GOTO 59515
  1274.       IF ZOK THEN _
  1275.          EXIT SUB
  1276.  
  1277. ------------------------[ KG081602 ]-------------------------
  1278.  
  1279. Problem:  When can't create callers log, say because subdirectory
  1280. in path does not exist, not getting any related diagnostic message.
  1281.  
  1282. Solution:  Change RBBSSUB1.BAS as follows:
  1283.  
  1284. 65000 IF ZDebug THEN _
  1285.          ZOutTxt$ = "RBBSSUB1 DEBUG Error Trap Entry ERL=" + _
  1286.               STR$(ERL) + _
  1287.               " ERR=" + _
  1288.               STR$(ERR) : _
  1289.          IF ZPrinter THEN _
  1290.             CALL Printit(ZOutTxt$) _
  1291.          ELSE CALL LPrnt(ZOutTxt$,1)
  1292.       ZErrCode = ERR
  1293. '
  1294. '     SetCall
  1295. '
  1296.       IF ERL = 108 THEN _
  1297.          CALL PScrn ("Unable to create callers log " + ZCallersFile$) : _ ' KG081602
  1298.          SYSTEM                                                      ' KG081602
  1299.       IF ERL = 110 THEN _
  1300.           RESUME NEXT
  1301.            .
  1302.            .
  1303.            .
  1304.  
  1305. ------------------------[ KG081601 ]-------------------------
  1306.  
  1307. Problem:  K)ill option at end of message being read may fail to
  1308. show even though caller can kill the message.
  1309.  
  1310. Solution:  Change RBBS-PC.BAS as follows:
  1311.  
  1312. 4600   IF ScanMsgs THEN _
  1313.           GOSUB 8020 : _
  1314.           GOTO 4630
  1315.        IF NOT JustSearching THEN _
  1316.           GOSUB 8000 : _
  1317.           IF QuotedReply THEN _
  1318.              QuotedReply = ZFalse : _
  1319.              GOTO 4603                                               ' KG081303
  1320.        IF ZRet THEN _
  1321.           GOTO 4630
  1322.        CanChangeSec = (ZUserSecLevel => ZSecChangeMsg)
  1323.        ShowKill =  - ((ZUserSecLevel >= ZOptSec(9)) AND (UserInHeader OR CanKill)) ' KG081601
  1324.        IF ZExpertUser THEN _
  1325.           WasA1$ = ",H,R,T,=,+,-" + _                                ' KG081303
  1326.                 MID$(",F",1,- (UserInHeader OR CanChangeSec) * 2) + _
  1327.                 MID$(",K",1,ShowKill * 2) + _                        ' KG081601
  1328.                 MID$(",U",1,- (ZUserSecLevel >= ZOptSec(54)) * 2) + _
  1329.                 MID$(",S",1, - CanChangeSec * 2) : _                 ' KG081303
  1330.           GOTO 4602                                                  ' KG081303
  1331. 4601   WasA1$ = ",H)lp,R)eply,T)hread,=)again,+,-" + _               ' KG081303
  1332.                 MID$(",F)wd",1, - (UserInHeader OR CanChangeSec) * 5) + _
  1333.                 MID$(",K)ill",1, ShowKill * 6) + _                   ' KG081601
  1334.                 MID$(",U)sr",1,- (ZUserSecLevel >= ZOptSec(54)) * 6) + _ ' KG081303
  1335.                 MID$(",S)ec",1, - CanChangeSec * 5)
  1336.  
  1337. ------------------------[ KG081501 ]-------------------------
  1338.  
  1339. Problem:  When stack personal download command to get new files
  1340. to you ("p *"), get "unable to access *" after the real files.
  1341.  
  1342. Solution:  Change RBBSSUB4.BAS as follows:
  1343.  
  1344. 59304 SelectedProtocol$ = ""
  1345.       IF ZLastIndex > 1 THEN _
  1346.          IF LEN(ZUserIn$(ZLastIndex)) = 1 THEN _
  1347.             SelectedProtocol$ = ZUserIn$(ZLastIndex) : _
  1348.             CALL AllCaps (SelectedProtocol$) : _                     ' KG081501
  1349.             IF INSTR(ZDefaultXfer$,SelectedProtocol$) = 0 THEN _     ' KG081501
  1350.                SelectedProtocol$ = "" _                              ' KG081501
  1351.             ELSE ZLastIndex = ZLastIndex - 1                         ' KG081501
  1352.       IF LEN(ZUserIn$(ZAnsIndex)) > 1 THEN _
  1353.          GOTO 59330
  1354.       CALL AllCaps (ZUserIn$(ZAnsIndex))
  1355.       ON INSTR("L*",ZUserIn$(ZAnsIndex)) GOTO 59305,59327
  1356.       GOTO 59303
  1357.  
  1358. ------------------------[ KG081405 ]-------------------------
  1359.  
  1360. Display in conference view, when have personal mail waiting,
  1361. made easier to see by reporting only when have any.   Based on
  1362. work done by John Morris.
  1363.  
  1364. Change RBBSSUB4.BAS as follows:
  1365.  
  1366. 59852 IF NOT ZOK THEN _
  1367.          GOTO 59854 _                                                ' KG072101
  1368.       ELSE IF EOF(2) THEN _                                          ' KG072101
  1369.               IF LogicalEOF$ = "" OR SkipParms = 0 THEN _            ' KG073104
  1370.                  GOTO 59854 _                                        ' KG072101
  1371.               ELSE CALL FindIt (ZConfMailList$) : _                  ' KG072101
  1372.                    SkipParms = 0 : _                                 ' KG072901
  1373.                    GOTO 59852                                        ' KG072101
  1374.          CALL ReadAny
  1375.          ZActiveUserFile$ = ZOutTxt$
  1376.          CALL ReadAny
  1377.          IF ZErrCode > 0 THEN _
  1378.             GOTO 59854
  1379.          SkipParms = SkipParms + 2                                   ' KG080701
  1380.          ZActiveMessageFile$ = ZOutTxt$                              ' KG072901
  1381.          CALL FindFile (ZActiveUserFile$,ZOK)
  1382.          IF NOT ZOK THEN _
  1383.             GOTO 59854
  1384.          CALL OpenUser (HighestUserRecord)
  1385.          FIELD 5, 128 AS ZUserRecord$
  1386.          CALL FindFile (ZActiveMessageFile$,ZOK)
  1387.          IF NOT ZOK THEN _
  1388.             GOTO 59854
  1389.          CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
  1390.                         0,0,HighestUserRecord,_
  1391.                         Found,HoldUserFileIndex,ZWasSL)
  1392.          IF NOT Found THEN _
  1393.             GOTO 59853                                               ' KG080701
  1394.          CALL OpenMsg
  1395.          FIELD 1, 128 AS ZMsgRec$
  1396.          GET 1,1
  1397.          AnyMail = ZTrue
  1398.          WasX = CVI(MID$(ZUserRecord$,57,2))
  1399.          WasX = (WasX AND 512) > 0
  1400.          CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
  1401.          InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
  1402.          IF InCur THEN _
  1403.             WasX = ZMailWaiting : _                                  ' KG030101
  1404.             ZWasA = ZLastMsgRead _
  1405.          ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
  1406.          ZWasB = VAL(LEFT$(ZMsgRec$,8))
  1407.          WasZ = (ZWasB - ZWasA)
  1408.          IF WasZ < 0 THEN _
  1409.             ZWasA = 0 : _
  1410.             WasZ = ZWasB _
  1411.          ELSE IF WasZ = 0 THEN _
  1412.                  WasX = ZFalse
  1413.          ZOutTxt$ = MID$(STR$((ZWasB > ZWasA) * WasZ),2)
  1414.          ZWasSL = LEN(ZOutTxt$)
  1415.          ZOutTxt$ = SPACE$(-(ZWasSL<4) * (4-ZWasSL)) + ZOutTxt$
  1416.          ZWasSL = LEN(CurPre$)
  1417.          IF CurPre$ = "USERS" AND CurExt$ = "" THEN _
  1418.             Conf$ = "MAIN" _
  1419.          ELSE Conf$ = LEFT$(CurPre$,ZWasSL-1)
  1420.          ZWasY$ = Conf$ + SPACE$(-(ZWasSL<8) * (8-ZWasSL))
  1421.          IF WasX THEN _
  1422.             WasX$ = ZEmphasizeOn$ + "*Some* to you" + ZEmphasizeOff$ _ ' KG081405
  1423.          ELSE WasX$ = ""                                             ' KG081405
  1424.          ZOutTxt$ = ZWasY$ + ": " + ZOutTxt$ + " new message(s) " + _ ' KG081405
  1425.               WasX$                                                  ' KG081405
  1426.          ZSubParm = 5
  1427.          CALL TPut
  1428.          ZJumpSupported = ZFalse                                     ' DA080901
  1429.          IF SkipJoinUnjoin THEN _
  1430.             CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) : _
  1431.             GOTO 59853                                               ' KG080701
  1432.          ZTurboKey = -ZTurboKeyUser
  1433.          CALL AskMore (",J)oin,U)njoin",ZTrue,ZFalse,WasX,ZFalse)
  1434.          IF ZNo THEN _
  1435.             GOTO 59854
  1436.          WasX$ = LEFT$(ZUserIn$(1),1)
  1437.          CALL AllCaps (WasX$)
  1438.          IF WasX$ = "J" THEN _
  1439.             ZHomeConf$ = Conf$ : _
  1440.             GOTO 59854
  1441.          IF WasX$ = "U" THEN _
  1442.             IF InCur OR (OrigPre$ = CurPre$ AND OrigExt$ = CurExt$) THEN _
  1443.                CALL QuickTPut1 ("Can't omit yourself from the board or conference you're in") _
  1444.             ELSE LSET ZUserRecord$ = CHR$(0) + "deleted user" : _
  1445.                  ZUserFileIndex = HoldUserFileIndex : _
  1446.                  ZSubParm = 6 : _
  1447.                  CALL FileLock : _
  1448.                  PUT 5, HoldUserFileIndex : _
  1449.                  ZSubParm = 8 : _
  1450.                  CALL FileLock : _
  1451.                  CALL QuickTPut1 ("Omitted you from " + Conf$)       ' KG073104
  1452.  
  1453. ------------------------[ KG081404 ]-------------------------
  1454.  
  1455. Problem:  Possible to get part of screen to scroll off without
  1456. pausing when doing msg header or topic scan.
  1457.  
  1458. Solution:  Change RBBS-PC.BAS as follows:
  1459.  
  1460. 1210 GOSUB 41000
  1461.      IF ZAnsIndex < ZLastIndex THEN _
  1462.         GOTO 1232
  1463.      CALL Talk (10,ZOutTxt$)
  1464.      CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                        ' KG081404
  1465.      CALL DispTimeRemain (MinsRemaining)
  1466.      IF ZExpertUser THEN _
  1467.         GOTO 1230
  1468.  
  1469. 1230 CALL Line25                                                     ' KG081404
  1470.      IF ZConfMode THEN _
  1471.         ZOutTxt$ = ZConfName$ : _
  1472.         GOSUB 12979 : _
  1473.         CALL Talk (65,ZConfName$)
  1474.      IF ZMenuIndex = 6 THEN _
  1475.         ZSubParm = 1 : _
  1476.         CALL Library
  1477.      CALL Talk (ZMenuIndex, ZOutTxt$)
  1478.  
  1479. 4650 CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                        ' KG081404
  1480.      CALL QuickTPut1 ("--End Msgs--")                                ' KG081404
  1481.      RETURN
  1482.  
  1483. ------------------------[ KG081403 ]-------------------------
  1484.  
  1485. Problem:  code had become jumbled so that logic difficult to
  1486. understand from the appearance.
  1487.  
  1488. Change CONFIG.BAS as follows:
  1489.  
  1490. 14980 CALL ASKRO ("Specify name of the file for parameter " + X$ + ".",24,HJ$)
  1491.       CALL ALLCAPS (HJ$)
  1492.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 12 THEN _
  1493.          GOTO 14980
  1494.       L1 = INSTR(HJ$,".")
  1495.       IF L1 = 0 THEN _
  1496.          IF LEN(HJ$) < 9 THEN _                                      ' KG081403
  1497.             GOTO 15045 _                                             ' KG081403
  1498.          ELSE GOTO 14980                                             ' KG081403
  1499.       IF L1 > 9 THEN _
  1500.          GOTO 14980
  1501.       IF L1 < 2 THEN _
  1502.          GOTO 14980
  1503.       IF LEN(HJ$) - L1 > 3 THEN _
  1504.          GOTO 14980
  1505.  
  1506. ------------------------[ KG081402 ]-------------------------
  1507.  
  1508. Problem:  the prefix for some help commands is asked for in
  1509. CONFIG but never actually used to set the names of help files.
  1510.  
  1511. Change CONFIG.BAS as follows:
  1512.  
  1513. 14815 GOSUB 15200
  1514.       QUES.PATH$ = HJ$
  1515.       RETURN
  1516. '
  1517. ' *  PREFIX FOR FOR FOUR MAJOR 'HELP' FILES                          ' KG081402
  1518. '
  1519. 14820 GOSUB 14970
  1520.       IF LEN(HJ$) > 7 THEN _
  1521.          RETURN
  1522.       HELP.FILE.PREFIX$ = HJ$
  1523.       HELP$(3) = HELP.FILE.PREFIX$ + "3"                             ' KG081402
  1524.       HELP$(4) = HELP.FILE.PREFIX$ + "4"                             ' KG081402
  1525.       HELP$(7) = HELP.FILE.PREFIX$ + "7"                             ' KG081402
  1526.       HELP$(9) = HELP.FILE.PREFIX$ + "9"                             ' KG081402  
  1527.       RETURN
  1528.  
  1529. ------------------------[ KG081401 ]-------------------------
  1530.  
  1531. Problem:  Initialization of modem commands in CONFIG had some
  1532. redundancy and inconsistency.
  1533.  
  1534. Change CNFG-SUB.BAS as follows:
  1535.  
  1536. 62120 SUB MODEMINITCMD STATIC                                        ' KG080901
  1537.       RTS$ = "NO"                                                    ' DA080503
  1538.       MODEM.INIT.WAIT.TIME = 3                                       ' DA080503
  1539.       COMMANDS.BETWEEN.RINGS = FALSE                                 ' DA080503
  1540.       FIRMWARE.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0"          ' KG081402
  1541.       FIRMWARE.CLEAR.COMMAND$ = "AT&F"                               ' DA080503
  1542.       FIRMWARE.WRITE.COMMAND$ = "AT&W"                               ' DA080503
  1543.       KEEP.INIT.BAUD = FALSE                                         ' DA080503
  1544.       MODEM.ANSWER.COMMAND$      = "ATQ0X1V1A"
  1545.       MODEM.COMMAND.DELAY.TIME   = 1
  1546.       MODEM.COUNT.RINGS.COMMAND$ = "ATS1?"
  1547.       MODEM.GO.OFFHOOK.COMMAND$  = "ATH1M0"                          ' DA080503
  1548.       'MODEM.GO.OFFHOOK.COMMAND$  = "ATQ1E1H1M0"
  1549.       MODEM.INIT.BAUD$           = "300"
  1550.       MODEM.INIT.COMMAND$        = "ATE0M0Q0V1X1S0=254S2=255S10=20"  ' DA080503
  1551.       'MODEM.INIT.COMMAND$        = "ATM0Q1S2=255S10=30E0Q0X1S0=254  "
  1552.       MODEM.RESET.COMMAND$       = "ATZ"                             ' KG081402
  1553.       'USER.INITIALIZE.COMMAND$   = "AT&C1&D3B1E0V1M0S0=0&T5"
  1554.       'USER.FIRMWARE.WRITE.CMND$  = "&W"
  1555.       USER.ANSWER.COMMAND$ = MODEM.ANSWER.COMMAND$                   ' DA080503
  1556.       USER.COUNT.RINGS.COMMAND$ = MODEM.COUNT.RINGS.COMMAND$         ' DA080503
  1557.       USER.GO.OFFHOOK.COMMAND$ = MODEM.GO.OFFHOOK.COMMAND$           ' DA080503
  1558.       USER.INIT.COMMAND$ = MODEM.INIT.COMMAND$                       ' DA080503
  1559.       USER.RESET.COMMAND$ = MODEM.RESET.COMMAND$                     ' DA080503
  1560.       USER.INITIALIZE.COMMAND$ = FIRMWARE.INITIALIZE.COMMAND$        ' DA080503
  1561.       USER.FIRMWARE.CLEAR.CMND$ = FIRMWARE.CLEAR.COMMAND$            ' DA080503
  1562.       USER.FIRMWARE.WRITE.CMND$ = FIRMWARE.WRITE.COMMAND$            ' DA080503
  1563.       END SUB                                                        ' KG080901
  1564.  
  1565. ------------------------[ XX081401 ]-------------------------
  1566.  
  1567. Problem:  When specify a macro to be executed before a protocol,
  1568. in PROTO.DEF, it will not be executed if protocol is external.
  1569.  
  1570. Solution:  Change RBBSSUB5.BAS as follows:
  1571.  
  1572. 20262 IF ZBatchTransfer THEN _
  1573.          IF ZAnsIndex < LastDnld THEN _
  1574.             RETURN _
  1575.          ELSE ZBlocksInFile# = BatchBlocks# : _
  1576.               ZBytesInFile# = BatchBytes# : _
  1577.               ZNumDnldBytes! = BatchBytes# : _
  1578.               IF ZBytesInFile# < 1 THEN _
  1579.                  RETURN _
  1580.               ELSE GOSUB 20780 : _
  1581.                    IF ZFileSysParm > 1 OR NOT ZOK THEN _
  1582.                       RETURN
  1583.       IF ZAutoDownInProgress THEN _
  1584.          CALL SendName : _
  1585.          IF ZAbort THEN _
  1586.             DnldCompleted = ZFalse : _
  1587.             GOSUB 21760 : _
  1588.             RETURN
  1589.       GOSUB 20337                                                    ' XX081401
  1590.       CALL Transfer
  1591.  
  1592. ------------------------[ KG081303 ]-------------------------
  1593.  
  1594. Problem:  At the More prompt at the end of a message, RBBS does
  1595. not offer any help.   Used to display HELP07.
  1596.  
  1597. Solution:  The code was re-structured to make it clearer, faster, and
  1598. easy to revise, at the same time the help was added back.  Change
  1599. RBBS-PC.BAS as follows:
  1600.  
  1601. 4600   IF ScanMsgs THEN _
  1602.           GOSUB 8020 : _
  1603.           GOTO 4630
  1604.        IF NOT JustSearching THEN _
  1605.           GOSUB 8000 : _
  1606.           IF QuotedReply THEN _
  1607.              QuotedReply = ZFalse : _
  1608.              GOTO 4603                                               ' KG081303
  1609.        IF ZRet THEN _
  1610.           GOTO 4630
  1611.        CanChangeSec = (ZUserSecLevel => ZSecChangeMsg)
  1612.        WasI =  - ((ZUserSecLevel >= ZOptSec(9)) AND (UserInHeader OR CanKill)) ' KG051702
  1613.        IF ZExpertUser THEN _
  1614.           WasA1$ = ",H,R,T,=,+,-" + _                                ' KG081303
  1615.                 MID$(",F",1,- (UserInHeader OR CanChangeSec) * 2) + _
  1616.                 MID$(",K",1,WasI * 2) + _                            ' KG051702
  1617.                 MID$(",U",1,- (ZUserSecLevel >= ZOptSec(54)) * 2) + _
  1618.                 MID$(",S",1, - CanChangeSec * 2) : _                 ' KG081303
  1619.           GOTO 4602                                                  ' KG081303
  1620. 4601   WasA1$ = ",H)lp,R)eply,T)hread,=)again,+,-" + _               ' KG081303
  1621.                 MID$(",F)wd",1, - (UserInHeader OR CanChangeSec) * 5) + _
  1622.                 MID$(",K)ill",1, WasI * 6) + _                     ' KG051702
  1623.                 MID$(",U)sr",1,- (ZUserSecLevel >= ZOptSec(54)) * 6) + _ ' KG081303
  1624.                 MID$(",S)ec",1, - CanChangeSec * 5)
  1625. 4602   ZTurboKey = -ZTurboKeyUser                                    ' KG081303
  1626.        IF JustSearching OR NOT JustReplied THEN _
  1627.           GOTO 4603                                                  ' KG081303
  1628.        JustReplied = ZFalse
  1629.        CALL AskMore (WasA1$,ZTrue,ZFalse,ZAnsIndex,ZFalse)
  1630.        CALL SkipLine (1)
  1631.        IF ZNo THEN _
  1632.           RETURN
  1633.        CALL AllCaps (ZUserIn$(1))                                    ' KG081303
  1634.        ZReply = (ZReply OR ZUserIn$(1) = "R")                        ' KG081303
  1635.        IF ZUserIn$(1) <> "=" THEN _                                  ' KG081303
  1636.           GOTO 4605                                                  ' KG081303
  1637.        CALL SkipLine (1)
  1638. 4603   IF NOT ZPswdFailed THEN _                                     ' KG081303
  1639.           GOTO 4604                                                  ' KG081303
  1640.        IF WasPG AND (NOT ZNonStop) THEN _
  1641.           ZAttemptsAllowed = 2 : _
  1642.           ZSubParm = 2 : _
  1643.           CALL PassWrd
  1644.        IF ZPswdFailed THEN _                                         ' KG081303
  1645.           GOTO 4629
  1646. 4604   GOSUB 9000                                                    ' KG081303
  1647.        JustReplied = ZFalse
  1648.        DontPrint = ZFalse
  1649.        IF JustSearching THEN _
  1650.           GOTO 4629
  1651.        IF ZAnsIndex > NumMsgsSelected THEN _
  1652.           GOTO 4650
  1653.        CALL SkipLine (1)
  1654.        GOSUB 41000                                                   ' KG081303
  1655.        ZKillMessage = ZFalse
  1656.        ZReply = ZFalse
  1657.        IF ZNonStop THEN _
  1658.           GOTO 4629
  1659.        ZTurboKey = -ZTurboKeyUser                                    ' KG081303
  1660.        CALL AskMore (WasA1$,ZTrue,ZFalse,WasXX,ZFalse)
  1661.        IF ZNo THEN _
  1662.           ZAnsIndex = ZLastIndex + 1 : _
  1663.           RETURN
  1664.        CALL AllCaps(ZUserIn$(1))
  1665.        ZReply = (ZReply OR ZUserIn$(1) ="R")
  1666. 4605   ON INSTR(" FUST+-KRH?=",LEFT$(ZUserIn$(1),1)) GOTO _          ' KG081303
  1667.           4620,4606,4607,4608,4609,4610,4610,4611,4621,4612,4601,4613 ' KG081303
  1668.        GOTO 4620                                                     ' KG081303
  1669. 4606   IF NOT (UserInHeader OR CanChangeSec) THEN _   ' Forward      ' KG081303
  1670.           GOTO 4620                                                  ' KG081303
  1671.        MsgFwd = ZTrue
  1672.        GOTO 4623
  1673. 4607   IF ZUserSecLevel < ZOptSec(54) THEN _    ' User edit          ' KG081303
  1674.           GOTO 4620                                                  ' KG081303
  1675.        EditFromRead = 1
  1676.        ZReply=ZTrue
  1677.        CALL PutMsgAttr
  1678.        TempHashValue$ = MsgFrom$
  1679.        CALL Trim (TempHashValue$)
  1680.        IF TempHashValue$ = "SYSOP" THEN _
  1681.           TempHashValue$ = ZSysopPswd1$ + " " + ZSysopPswd2$
  1682.        GOTO 11000
  1683. 4608   IF CanChangeSec THEN _            ' Security to read          ' KG081303
  1684.           CALL PutMsgAttr : _
  1685.           GOSUB 4665 : _
  1686.           ZReply = ZFalse : _
  1687.           QuotedReply = ZTrue : _
  1688.           CALL GetMsgAttr : _
  1689.           DontPrint = ZTrue : _
  1690.           ZUserIn$ = "=" : _
  1691.           JustReplied = ZTrue : _
  1692.           GOTO 4560
  1693.        GOTO 4620                                                     ' KG081303
  1694. 4609   CALL SetThread (CurMsg, OrigSubject$)     ' Thread            ' KG081303
  1695.        IF ZWasQ > 0 THEN _
  1696.           SearchHeader$ = ZUserIn$(2) : _
  1697.           SubInHeader$ = SearchHeader$ : _
  1698.           CALL Trim (SubInHeader$) : _
  1699.           GOTO 4352
  1700.        GOTO 4620                                                      ' KG081303
  1701. 4610   ZWasA = INSTR(" +-",ZUserIn$(1))      ' +/- read direction     ' KG081303
  1702.        CurMsg = CurMsg + 5 - 2 * ZWasA                                ' KG081303
  1703.        Forward = (ZWasA = 2)
  1704.        Reverse = (NOT Forward)
  1705.        SearchString$ = ""
  1706.        IF Reverse THEN _
  1707.           GOTO 4490 _
  1708.        ELSE GOTO 4450
  1709. 4611   IF (UserInHeader OR CanKill) THEN _     ' Kill                ' KG081303
  1710.          IF ZUserSecLevel >= ZOptSec(9) THEN _
  1711.             CALL PutMsgAttr : _
  1712.             MsgToKill = CurMsg : _
  1713.             Temp = ZWasQ : _
  1714.             GOSUB 3950 : _
  1715.             CALL GetMsgAttr : _
  1716.             GOTO 4629 _
  1717.          ELSE ZViolation$ = "MORE KILL" : _
  1718.               GOSUB 1380 : _
  1719.               GOTO 4629
  1720.        GOTO 4620                                                     ' KG081303
  1721. 4612   ZFileName$ = ZHelp$(7)  ' H - help                            ' KG081303
  1722.        GOSUB 1790                                                    ' KG081303
  1723.        GOTO 4601                                                     ' KG081303
  1724. 4613   CALL SkipLine (1) ' = read again                              ' KG081303
  1725.        GOTO 4560                                                     ' KG081303
  1726.  
  1727. Omit lines 4614,4616,4617,4618
  1728.  
  1729. ------------------------[ KG081302 ]-------------------------
  1730.  
  1731. Problem:  RBBS should support "?" for help, but does not at the
  1732. message read prompt.
  1733.  
  1734. Change RBBS-PC.BAS as follows:
  1735.  
  1736. 4402 IF LEN(ZUserIn$(ZAnsIndex)) = 1 THEN _                          ' KG022701
  1737.         IF INSTR("Qq",ZUserIn$) THEN _
  1738.            RETURN _
  1739.         ELSE IF INSTR("Hh?",LEFT$(ZUserIn$(ZAnsIndex),1)) THEN _     ' KG081302
  1740.                 ZFileName$ = ZHelpPath$ + "MR" + ZHelpExtension$ : _
  1741.                 GOSUB 1790 : _
  1742.                 GOTO 4390
  1743.      MsgIndex = 0                                                    ' KG022701
  1744.      NumMsgsSelected = ZWasQ
  1745.      GOTO 4370
  1746.  
  1747. ------------------------[ KG081301 ]-------------------------
  1748.  
  1749. Problem:  The utilities toggle command will not stack a "C" for
  1750. case change.
  1751.  
  1752. Solution:  Change RBBS-PC.BAS as follows:
  1753.  
  1754. 1510 ZStackC = ZTrue                                                 ' KG081301
  1755.      GOSUB 12930
  1756.      IF ZWasQ=0 THEN _
  1757.         RETURN
  1758.      ZWasZ$ = ZUserIn$(ZAnsIndex)
  1759.      CALL AllCaps (ZWasZ$)
  1760.      ZFF = INSTR("ABCFHLNTX!",ZWasZ$)
  1761.      IF ZFF < 1 THEN _
  1762.         GOTO 1500
  1763.      CALL Toggle (ZFF)
  1764.      GOSUB 12997
  1765.      GOTO 1500
  1766.  
  1767. ------------------------[ KG081201 ]-------------------------
  1768.  
  1769. Problem:  When search files by wildcard filename ending with
  1770. "*", such as "PC*", RBBS matches only when there is not extension
  1771. versus matching all extensions like DOS.
  1772.  
  1773. Solution:  Change RBBSSUB5.BAS as follows:
  1774.  
  1775. 21820 WasRS$ = ZUserIn$(ZAnsIndex)
  1776.       WildSearch = (INSTR(WasRS$,"*") > 0 OR INSTR(WasRS$,"?") > 0)
  1777.       CALL AllCaps (WasRS$)
  1778.       IF RIGHT$(WasRS$,1) = "*" THEN _                               ' KG081201
  1779.          IF RIGHT$(WasRS$,2) <> ".*" THEN _                          ' KG081201
  1780.             WasRS$ = WasRS$ + ".*"                                   ' KG081201
  1781.       SearchString$ = WasRS$
  1782.       SearchDate$ = ""
  1783.       ZJumpSearching = ZFalse
  1784.       WasA1$ = WasRS$
  1785.       GOTO 21867
  1786. '
  1787. ' *****  P - personal download  ****
  1788. '
  1789. '  (formerly lines 52950 to 52952 in RBBS-PC.BAS
  1790.  
  1791. ------------------------[ DA081006 ]-------------------------
  1792.  
  1793. Problem:  CONFIG beeps when it does a normal, successful saved.
  1794. Instead use sound to draw attention to problems.
  1795.  
  1796. Change CONFIG.BAS as follows:
  1797.  
  1798. 59080 CLOSE #1
  1799. '
  1800. ' * NOTIFY THE SYSOP THAT THE CONFIGURATION DESCRIPTION FILE HAS BEEN WRITTEN
  1801. '
  1802.       CLS
  1803.       LOCATE 12,1,1
  1804.       PRINT "Saved RBBS-PC configuration description file " ; CONFIG.FILENAME$ ' KG080904
  1805.       GOTO 60340                                                     ' DA081006
  1806.  
  1807. ------------------------[ DA081005 ]-------------------------
  1808.  
  1809. Problem:  Should only have carriage return inside modem commands,
  1810. not carriage return plus line feed, when substitute for "{".
  1811.  
  1812. Change CONFIG.BAS as follows:
  1813.  
  1814. 23736 PRINT "Send:"                                                  ' DA080502
  1815.       WHILE INSTR(A$, "{")                                           ' DA080502
  1816.          MID$(A$, INSTR(A$,"{"), 1) = CHR$(13)                       ' DA081005
  1817.       WEND                                                           ' DA080502
  1818.       WHILE INSTR(A$, "~")                                           ' DA080502
  1819.          WAIT.FOUND = INSTR(A$,"~")                                  ' DA080502
  1820.          TEMP.A$ = MID$(A$, WAIT.FOUND + 1)                          ' DA080502
  1821.          A$ = LEFT$(A$, WAIT.FOUND - 1)                              ' DA080502
  1822.          GOSUB 23739                                                 ' DA080502
  1823.          DELAY! = FNTI! + 1                                          ' DA080502
  1824.          GOSUB 60440                                                 ' DA080502
  1825.          A$ = TEMP.A$                                                ' DA080502
  1826.       WEND                                                           ' DA080502
  1827.       A$ = A$ + CHR$(13)                                             ' DA081005
  1828.       GOSUB 23739                                                    ' DA080502
  1829.       DELAY! = FNTI! + 3                                             ' DA080502
  1830.       GOSUB 60440                                                    ' DA080502
  1831.       PRINT "Receive:"                                               ' DA080502
  1832.       IF NOT FOSSIL THEN _                                           ' DA080502
  1833.          GOTO 23738                                                  ' DA080503
  1834.       FOS.LEN% = 80                                                  ' DA080503
  1835.       CALL FOSREAD(COMPORT%, FOS.LEN%, FOS.BUF$)                     ' DA080502
  1836.       PRINT LEFT$(FOS.BUF$,FOS.LEN%)                                 ' DA080503
  1837.       RETURN                                                         ' DA080502
  1838.  
  1839. ------------------------[ DA081004 ]-------------------------
  1840.  
  1841. Problem:  Default secret name of SysOp changed to match quick start
  1842. in documentation, and one that does not have to changed with
  1843. each new version of RBBS.
  1844.  
  1845. Change CNFG-SUB.BAS as follows:
  1846.  
  1847. (line 63090)
  1848.          .
  1849.          .
  1850.          .
  1851.       SYSOP.FIRST.NAME$          = "TOM"
  1852.       SYSOP.LAST.NAME$           = "MACK"
  1853.       SYSOP.MENU.SECURITY.LEVEL  = SYSOP.SECURITY.LEVEL
  1854.       SYSOP.PASSWORD.1$          = "SECRET"                          ' DA081004
  1855.       SYSOP.PASSWORD.2$          = "NAME"                            ' DA081004
  1856.       TIME.TO.DROP.TO.DOS        = 0
  1857.       TRASHCAN.FILE$             = D$ + "TRASHCAN"
  1858.       TURN.PRINTER.OFF           = FALSE
  1859.       TURBO.RBBS                 = TRUE
  1860.          .
  1861.          .
  1862.          .
  1863.  
  1864. ------------------------[ DA081003 ]-------------------------
  1865.  
  1866. Version of RBBS changed to be just number and not to have "CPC"
  1867. as prefix.
  1868.  
  1869. (changes not listed since do not affect any functions)
  1870.  
  1871. ------------------------[ DA081002 ]-------------------------
  1872.  
  1873. Problem:  documentation of modem commands in source code is not
  1874. right and not right place to do this.
  1875.  
  1876. Change CONFIG.BAS as follows:
  1877.  
  1878. 23731 LOCATE 25,5
  1879.       COMPORT% = VAL(RIGHT$(COM.PORT$,1)) -1
  1880.       IF COMPORT% < 0 THEN _
  1881.          PRINT "COM port cannot be set while using COM0" : _
  1882.          DELAY! = FNTI! + 3 : _
  1883.          GOSUB 60440 : _
  1884.          RETURN
  1885.       FOS.BUF$ = SPACE$(80)                                          ' DA080502
  1886.       CLS                                                            ' DA080502
  1887.       PRINT "Setting modem firmware for RBBS-PC on " + COM.PORT$     ' DA080502
  1888.       IF NOT FOSSIL THEN _                                           ' DA080502
  1889.          GOTO 23732                                                  ' DA080502
  1890.       CALL FOSINIT(COMPORT%,RESULT%)                                 ' DA080502
  1891.       IF RESULT% = -1 THEN _                                         ' DA080502
  1892.          PRINT "ERROR initializing FOSSIL.  Firmware reset aborted." : _  ' DA080502
  1893.          GOTO 23736                                                  ' DA080502
  1894.       CALL FOSSPEED(COMPORT%,2400, 2, 3, 1)                          ' DA080502
  1895.       STATE% = 1                                                     ' DA080502
  1896.       CALL FOSDTR(COMPORT%,STATE%)                                   ' DA080502
  1897.       GOTO 23733                                                     ' DA081002
  1898.  
  1899. ------------------------[ DA081001 ]-------------------------
  1900.  
  1901. Shortens and clarifies code that displays screen full of modems
  1902. to select.
  1903.  
  1904. Change CNFG-SUB.BAS as follows:
  1905.  
  1906. 62103 CLOSE 2                                                        ' DA080503
  1907.       IF NETWORK.TYPE = 6 THEN _                                     ' DA080503
  1908.          OPEN "MODEMS.SET" FOR INPUT SHARED AS #2 _                  ' DA080503
  1909.       ELSE OPEN "I",2,"MODEMS.SET"                                   ' DA080503
  1910.       MODEM.MODEL = 0
  1911.       MODEM.PAGE = 0                                                 ' DA081001
  1912.  
  1913. 62105 CLS                                                            ' DA080503
  1914.       PRINT "NUMBER";
  1915.       LOCATE 1,10
  1916.       PRINT "Modem Model";
  1917.       LOCATE 1,40
  1918.       PRINT "Switch Settings";
  1919.       LOCATE 2,1
  1920.       PRINT STRING$(78,"-");
  1921.       FOR DISPLAY.LINE = 3 TO 19
  1922.          IF EOF(2) THEN _
  1923.             MODEM.PAGE = 1 : _                                       ' DA081001
  1924.             GOTO 62110
  1925.          MODEM.MODEL = MODEM.MODEL + 1
  1926.          INPUT #2, MODEM.MODEL$, SWITCHES$
  1927.          FOR I = 1 TO 14                    ' # MODEMS.SET parms - 2
  1928.             INPUT #2,GARBAGE$
  1929.          NEXT
  1930.          LOCATE DISPLAY.LINE, 2
  1931.          PRINT MODEM.MODEL;
  1932.          LOCATE DISPLAY.LINE, 10
  1933.          PRINT MODEM.MODEL$;
  1934.          LOCATE DISPLAY.LINE, 40
  1935.          PRINT SWITCHES$;
  1936.       NEXT                                                           ' DA081001
  1937.       LOCATE DISPLAY.LINE + 1, 2
  1938.       PRINT " 0"
  1939.       LOCATE DISPLAY.LINE + 1, 10
  1940.       PRINT "Next Page"
  1941. 62110 LOCATE 24,10                                                   ' DA080503
  1942.       PRINT "Use Parameter 231 to initialize modem's firmware";
  1943.       CALL GETINIT("Select modem number, or [ENTER] to exit", _
  1944.                     22,MODEM.PAGE,MODEM.MODEL,MODEM.SELECTED, CR)    ' DA081001
  1945.       IF CR THEN _
  1946.          EXIT SUB
  1947.       IF MODEM.SELECTED = 0 THEN _                                   ' DA081001
  1948.          GOTO 62105
  1949.       CLOSE 2
  1950.       IF NETWORK.TYPE = 6 THEN _
  1951.          OPEN "MODEMS.SET" FOR INPUT SHARED AS #2 _
  1952.       ELSE OPEN "I",2,"MODEMS.SET"
  1953.       FOR I = 1 TO (MODEM.SELECTED - 1) * 16      ' # of parms * modem
  1954.          INPUT #2,GARBAGE$
  1955.       NEXT
  1956.       INPUT #2, MODEM.MODEL$, _
  1957.                 SWITCHES$, _
  1958.                 USER.ANSWER.COMMAND$, _
  1959.                 USER.COUNT.RINGS.COMMAND$, _
  1960.                 USER.GO.OFFHOOK.COMMAND$, _
  1961.                 USER.INIT.COMMAND$, _
  1962.                 USER.RESET.COMMAND$, _
  1963.                 USER.INITIALIZE.COMMAND$, _
  1964.                 USER.FIRMWARE.CLEAR.CMND$, _
  1965.                 USER.FIRMWARE.WRITE.CMND$, _
  1966.                 RTS$, _
  1967.                 MODEM.INIT.WAIT.TIME, _
  1968.                 MODEM.COMMAND.DELAY.TIME, _
  1969.                 COMMANDS.BETWEEN.RINGS, _
  1970.                 MODEM.INIT.BAUD$, _
  1971.                 KEEP.INIT.BAUD
  1972.       CLOSE 2
  1973.       END SUB
  1974.  
  1975. ------------------------[ DA080903 ]-------------------------
  1976.  
  1977. Move "*" marking new files from column 13 to end of the file name.
  1978.  
  1979. Change RBBSSUB4.BAS as follows:
  1980.  
  1981. 59320 ZOutTxt$ = PartToPrint$
  1982.       IF PersonalStatus$ = "*" AND LEFT$(ZOutTxt$,1) <> " " THEN _
  1983.          MID$(ZOutTxt$, INSTR(ZOutTxt$," ")) = "*"                   ' DA080903
  1984.       CALL ColorDir (ZOutTxt$,"Y")
  1985.       IF ZLocalUser THEN _
  1986.          GOTO 59322
  1987.       CALL EofComm (Char)
  1988.       IF Char <> -1 THEN _
  1989.          GOTO 59323            ' comm port input
  1990.  
  1991. ------------------------[ DA080902 ]-------------------------
  1992.  
  1993. Problem:  Status line on local monitor sometimes got messed up and
  1994. scrolled.
  1995.  
  1996. Note that "Paged!" shortened to "PG!" and "Autopaged!" to "AP!".
  1997.  
  1998. Change RBBS-PC.BAS as follows:
  1999.  
  2000. 4755 CALL QuickTPut1 ("Try a msg or comment")
  2001.      ZPageStatus$ = "PG!"                                            ' DA080902
  2002.      CALL UpdtCalr ("Operator paged " + LEFT$(TIME$,5),2)
  2003.      RETURN
  2004.  
  2005. Change RBBSSUB2.BAS as follows:
  2006.  
  2007. 949 ZLine25$ = "Node " + _
  2008.                ZNodeID$ + " " + _
  2009.                ZPageStatus$ + " " + _
  2010.                MID$("AVL ",1, -4 * ZSysopAvail) + _                  ' DA080902
  2011.                MID$("ANY ",1, -4 * ZSysopAnnoy) + _                  ' DA080902
  2012.                MID$("LPT ",1, -4 * ZPrinter) + _                     ' DA080902
  2013.                MID$("SYS ",1, -4 * ZSysopNext) + _                   ' DA080902
  2014.                MID$("XOFF ",1,-5 * ZXOffEd) + _                      ' DA080902
  2015.                MID$("CTS ",1,-4 * ZNotCTS)                           ' DA080902
  2016. '
  2017. '
  2018. ' *  LINE 25 UPDATE ROUTINE
  2019. '
  2020. '
  2021. 950 IF NOT ZSnoop THEN _
  2022.        EXIT SUB
  2023.     ZCursorLine = CSRLIN
  2024.     ZCursorRow = POS(0)
  2025.     ZWasHH = LEN(ZActiveUserName$) + _
  2026.          LEN(ZWasCI$) + _
  2027.          LEN(ZLine25$) + _
  2028.          LEN(STR$(ZUserSecLevel))                                    ' DA080902
  2029.     LOCATE 25,1
  2030.     IF ZNetworkType = 0 THEN _
  2031.        IF ZAutoDownYes THEN _
  2032.           ZLockStatus$ = " AD " + _                                  ' DA080902
  2033.                          ZTimeLoggedOn$ _
  2034.        ELSE ZLockStatus$ = SPACE$(4) + _                             ' DA080902
  2035.                            ZTimeLoggedOn$
  2036.     IF ZWasHH > 63 THEN _                                            ' DA080902
  2037.        ZWasHH = 0 _                                                  ' DA080902
  2038.     ELSE _                                                           ' DA080902
  2039.        ZWasHH = 64 - ZWasHH                                          ' DA080902
  2040.     ZLine25Hold$ = ZLine25$ + _
  2041.                     SPACE$(ZWasHH) + _                               ' DA080902
  2042.                     STR$(ZUserSecLevel) + _
  2043.                     " " + _
  2044.                     ZActiveUserName$ + _
  2045.                     " " + _
  2046.                     ZWasCI$                                          ' DA080902
  2047.     ZLine25Hold$ = LEFT$(ZLine25Hold$, 66) + " " + ZLockStatus$      ' DA080902
  2048.     TempBasicWrites = ZUseBASICWrites
  2049.     ZUseBASICWrites = ZTrue
  2050.     CALL LPrnt(ZLine25Hold$,0)
  2051.     ZUseBASICWrites = TempBasicWrites
  2052.     LOCATE ZCursorLine,ZCursorRow
  2053.     END SUB
  2054.  
  2055. Change RBBSSUB4.BAS as follows:
  2056.  
  2057. (line 60300)
  2058.  
  2059.       SUB AutoPage STATIC
  2060.       CALL FindIt (ZAutoPageDef$)
  2061.       IF NOT ZOK THEN _
  2062.          EXIT SUB
  2063.       ZErrCode = 0
  2064.       ZOK = ZFalse
  2065.       WHILE NOT EOF(2) AND ZOK = ZFalse AND ZErrCode = 0
  2066.          CALL ReadParms (ZWorkAra$(),4,1)
  2067.          IF ZErrCode = 0 THEN _
  2068.             ZOK = (ZWorkAra$(1) = ZActiveUserName$) : _
  2069.             IF NOT ZOK THEN _
  2070.                IF ZNewUser AND ZWorkAra$(1) = "NEWUSER" THEN _
  2071.                   ZOK = ZTrue _
  2072.                ELSE IF LEFT$(ZWorkAra$(1),1) = "/" AND LEN(ZWorkAra$(1)) > 2 THEN _
  2073.                        ZWasB = INSTR (2,ZWorkAra$(1),"/") : _
  2074.                        IF ZWasB > 0 AND LEN(ZWorkAra$(1)) > ZWasB THEN _
  2075.                           IF ZUserSecLevel <= VAL(MID$(ZWorkAra$(1),ZWasB+1)) AND _
  2076.                              ZUserSecLevel >= VAL(MID$(ZWorkAra$(1),2)) THEN _
  2077.                                 ZOK = ZTrue
  2078.       WEND
  2079.       CLOSE 2
  2080.       IF ZErrCode > 0 OR NOT ZOK THEN _
  2081.          ZErrCode = 0 : _
  2082.          EXIT SUB
  2083.       ZPageStatus$ = "AP!"                                           ' DA080902
  2084.       IF LEFT$(ZWorkAra$(2),1) = "N" THEN _
  2085.          ZOutTxt$ = "Telling sysop you're on..." : _
  2086.          CALL RingCaller
  2087.       ZWasB = (ZWorkAra$(4) = "")
  2088.       ZWorkAra$(5) = ""
  2089.       FOR WasI = 1 TO VAL(ZWorkAra$(3))
  2090.          IF ZWasB THEN _
  2091.             CALL LPrnt (ZBellRinger$,0) : _
  2092.          ELSE ZWorkAra$(5) = ZWorkAra$(5) + "O4 X" + VARPTR$(ZWorkAra$(4))
  2093.       NEXT
  2094.       IF NOT ZWasB THEN _
  2095.          CALL RBBSPlay (ZWorkAra$(5))
  2096.       END SUB
  2097.  
  2098. ------------------------[ DA080901 ]-------------------------
  2099.  
  2100. Problem:  When do a conference V)iew after a Jump, jump option
  2101. persists and J does not do a join.
  2102.  
  2103. Change RBBSSUB4.BAS as follows:
  2104.  
  2105. 59852 IF NOT ZOK THEN _
  2106.          GOTO 59854 _                                                ' KG072101
  2107.       ELSE IF EOF(2) THEN _                                          ' KG072101
  2108.               IF LogicalEOF$ = "" OR SkipParms = 0 THEN _            ' KG073104
  2109.                  GOTO 59854 _                                        ' KG072101
  2110.               ELSE CALL FindIt (ZConfMailList$) : _                  ' KG072101
  2111.                    SkipParms = 0 : _                                 ' KG072901
  2112.                    GOTO 59852                                        ' KG072101
  2113.          CALL ReadAny
  2114.          ZActiveUserFile$ = ZOutTxt$
  2115.          CALL ReadAny
  2116.          IF ZErrCode > 0 THEN _
  2117.             GOTO 59854
  2118.          SkipParms = SkipParms + 2                                   ' KG080701
  2119.          ZActiveMessageFile$ = ZOutTxt$                              ' KG072901
  2120.          CALL FindFile (ZActiveUserFile$,ZOK)
  2121.          IF NOT ZOK THEN _
  2122.             GOTO 59854
  2123.          CALL OpenUser (HighestUserRecord)
  2124.          FIELD 5, 128 AS ZUserRecord$
  2125.          CALL FindFile (ZActiveMessageFile$,ZOK)
  2126.          IF NOT ZOK THEN _
  2127.             GOTO 59854
  2128.          CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
  2129.                         0,0,HighestUserRecord,_
  2130.                         Found,HoldUserFileIndex,ZWasSL)
  2131.          IF NOT Found THEN _
  2132.             GOTO 59853                                               ' KG080701
  2133.          CALL OpenMsg
  2134.          FIELD 1, 128 AS ZMsgRec$
  2135.          GET 1,1
  2136.          AnyMail = ZTrue
  2137.          WasX = CVI(MID$(ZUserRecord$,57,2))
  2138.          WasX = (WasX AND 512) > 0
  2139.          CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
  2140.          InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
  2141.          IF InCur THEN _
  2142.             WasX = ZMailWaiting : _                                  ' KG030101
  2143.             ZWasA = ZLastMsgRead _
  2144.          ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
  2145.          ZWasB = VAL(LEFT$(ZMsgRec$,8))
  2146.          WasZ = (ZWasB - ZWasA)
  2147.          IF WasZ < 0 THEN _
  2148.             ZWasA = 0 : _
  2149.             WasZ = ZWasB _
  2150.          ELSE IF WasZ = 0 THEN _
  2151.                  WasX = ZFalse
  2152.          ZOutTxt$ = MID$(STR$((ZWasB > ZWasA) * WasZ),2)
  2153.          ZWasSL = LEN(ZOutTxt$)
  2154.          ZOutTxt$ = SPACE$(-(ZWasSL<4) * (4-ZWasSL)) + ZOutTxt$
  2155.          ZWasSL = LEN(CurPre$)
  2156.          IF CurPre$ = "USERS" AND CurExt$ = "" THEN _
  2157.             Conf$ = "MAIN" _
  2158.          ELSE Conf$ = LEFT$(CurPre$,ZWasSL-1)
  2159.          ZWasY$ = Conf$ + SPACE$(-(ZWasSL<8) * (8-ZWasSL))
  2160.          IF WasX THEN _
  2161.             WasX$ = ZEmphasizeOn$ : _
  2162.             ZWasZ$ = ZEmphasizeOff$ _
  2163.          ELSE WasX$ = "" : _
  2164.               ZWasZ$ = ""
  2165.          ZOutTxt$ = ZWasY$ + ": " + ZOutTxt$ + " new message(s): " + _
  2166.               WasX$ + MID$(" None *Some*",-6 * WasX + 1,6) + " to you" + ZWasZ$
  2167.          ZSubParm = 5
  2168.          CALL TPut
  2169.          ZJumpSupported = ZFalse                                     ' DA080901
  2170.          IF SkipJoinUnjoin THEN _
  2171.             CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) : _
  2172.             GOTO 59853                                               ' KG080701
  2173.          ZTurboKey = -ZTurboKeyUser
  2174.          CALL AskMore (",J)oin,U)njoin",ZTrue,ZFalse,WasX,ZFalse)
  2175.          IF ZNo THEN _
  2176.             GOTO 59854
  2177.          WasX$ = LEFT$(ZUserIn$(1),1)
  2178.          CALL AllCaps (WasX$)
  2179.          IF WasX$ = "J" THEN _
  2180.             ZHomeConf$ = Conf$ : _
  2181.             GOTO 59854
  2182.          IF WasX$ = "U" THEN _
  2183.             IF InCur OR (OrigPre$ = CurPre$ AND OrigExt$ = CurExt$) THEN _
  2184.                CALL QuickTPut1 ("Can't omit yourself from the board or conference you're in") _
  2185.             ELSE LSET ZUserRecord$ = CHR$(0) + "deleted user" : _
  2186.                  ZUserFileIndex = HoldUserFileIndex : _
  2187.                  ZSubParm = 6 : _
  2188.                  CALL FileLock : _
  2189.                  PUT 5, HoldUserFileIndex : _
  2190.                  ZSubParm = 8 : _
  2191.                  CALL FileLock : _
  2192.                  CALL QuickTPut1 ("Omitted you from " + Conf$)       ' KG073104
  2193.  
  2194. ------------------------[ ML080802 ]-------------------------
  2195.  
  2196. Problem:  When time shortened for external event, report of time
  2197. left may be different from time remaining displayed because of
  2198. an inconsistency in BASIC.
  2199.  
  2200. Change RBBSSUB3.BAS as follows:
  2201.  
  2202. 41020 MinsRemaining = INT((ZSecsPerSession! - ZSecsUsedSession!) / 60) ' ML080802
  2203.       END SUB
  2204.  
  2205. ------------------------[ KG081002 ]-------------------------
  2206.  
  2207. Problem:  When a caller joins a subboard for the 1st time, and it
  2208. has its own FMS master directory, the # of files reported as new
  2209. is wrong.
  2210.  
  2211. Solution:  Change RBBS-PC.BAS as follows:
  2212.  
  2213. 5348 GOSUB 12987
  2214.      GOSUB 12990
  2215.      IF SubBoard THEN _
  2216.         ZHasDoored = ZFalse : _
  2217.         ZActiveFMSDir$ = "" : _
  2218.         ZTimeLoggedOn$ = TIME$ : _                                   ' KG070601
  2219.         BoardCheckDate$ = LEFT$("00-00-00",-ZNewUser*8) + _          ' KG081001
  2220.                           LEFT$(ZLastDateTimeOn$,-(NOT ZNewUser)*8) : _  ' KG081001
  2221.         RETURN 108
  2222.      GOSUB 827
  2223.      IF UpdateDate THEN _
  2224.         BoardCheckDate$ = ZLastDateTimeOn$ : _
  2225.         ZTimeLoggedOn$ = TIME$ : _                                   ' KG070601
  2226.         LSET ZLastDateTimeOn$ = ZCurDate$ + _
  2227.                                   " " + _
  2228.                                   ZTimeLoggedOn$ : _
  2229.         GOSUB 9440 : _
  2230.         GOSUB 12991
  2231.      IF PrevUSL <> ZUserSecLevel THEN _
  2232.         CALL SetPrompt
  2233.      GOSUB 1241
  2234.      RETURN 852
  2235.  
  2236. ------------------------[ KG081001 ]-------------------------
  2237.  
  2238. Code shortened and simplified again.
  2239.  
  2240. Change CONFIG.BAS as follows:
  2241.  
  2242. 22350 CALL ASKRO ("Save changes?  Y)es & exit, N)o - reedit, Q)uit don't save (Y,N,Q)",24,HJ$) ' KG080902
  2243.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 4 THEN _
  2244.          GOTO 22350                                                  ' KG081001
  2245.       CALL ALLCAPS (HJ$)
  2246.       AB = INSTR("NYQ",LEFT$(HJ$,1))                                 ' KG080903
  2247.       ON AB GOTO 12190,59000,60360                                   ' KG081001
  2248.       GOTO 22350                                                     ' KG081001
  2249.  
  2250. Omit lines 22380,22470
  2251.  
  2252. ------------------------[ KG080905 ]-------------------------
  2253.  
  2254. Problem:  When personal files are displayed and the description
  2255. length goes out the maximum permitted, get double spacing because
  2256. the mark for new (*) is added at the front.
  2257.  
  2258. Solution:  Move the mark for new to the end of the file name (column
  2259. 13).   Change RBBSSUB4.BAS as follows:
  2260.  
  2261. 59320 ZOutTxt$ = PartToPrint$
  2262.       IF PersonalStatus$ = "*" AND LEFT$(ZOutTxt$,1) <> " " THEN _
  2263.          MID$(ZOutTxt$,13,1) = "*"                                   ' KG080905
  2264.       CALL ColorDir (ZOutTxt$,"Y")
  2265.       IF ZLocalUser THEN _
  2266.          GOTO 59322
  2267.       CALL EofComm (Char)
  2268.       IF Char <> -1 THEN _
  2269.          GOTO 59323            ' comm port input
  2270.  
  2271. ------------------------[ KG080904 ]-------------------------
  2272.  
  2273. Problem:  Final message in config saves that def file saved
  2274. onto default drive.  No necessarily right, as can specify any
  2275. drive/path on command line when invoke CONFIG.
  2276.  
  2277. Solution:  Change CONFIG.BAS as follows:
  2278.  
  2279. 59080 CLOSE #1
  2280. '
  2281. ' * NOTIFY THE SYSOP THAT THE CONFIGURATION DESCRIPTION FILE HAS BEEN WRITTEN
  2282. '
  2283.       CLS
  2284.       LOCATE 12,1,1
  2285.       PRINT "Saved RBBS-PC configuration description file " ; CONFIG.FILENAME$ ' KG080904
  2286.       GOSUB 60380
  2287.       GOTO 60340
  2288.  
  2289. ------------------------[ KG080903 ]-------------------------
  2290.  
  2291. Problem:  Code needlessly long and complicated.
  2292.  
  2293. Change CONFIG.BAS as follows:
  2294.  
  2295. 22380 IF LEN(HJ$) < 1 OR LEN(HJ$) > 4 THEN _
  2296.          GOTO 22470
  2297.       CALL ALLCAPS (HJ$)
  2298.       AB = INSTR("NYQ",LEFT$(HJ$,1))                                 ' KG080903
  2299. 22470 IF AB = 0 THEN _                                               ' KG080903
  2300.          AB = 4                                                      ' KG080903
  2301.       RETURN
  2302.  
  2303. ------------------------[ KG080902 ]-------------------------
  2304.  
  2305. Problem:  Meaning of exit choices in CONFIG not as clear as should be.
  2306.  
  2307. Change CONFIG.BAS as follows:
  2308.  
  2309. 22350 CALL ASKRO ("Save changes?  Y)es & exit, N)o - reedit, Q)uit don't save (Y,N,Q)",24,HJ$) ' KG080902
  2310.       GOSUB 22380
  2311.       ON AB GOTO 12190,59000,60360,22350
  2312.  
  2313. ------------------------[ KG080901 ]-------------------------
  2314.  
  2315. Problem:  Redundant code in two places.
  2316.  
  2317. Add the following variables to CNFG-VAR.BAS:
  2318.  
  2319.           USER.ANSWER.COMMAND$
  2320.           USER.COUNT.RINGS.COMMAND$
  2321.           USER.GO.OFFHOOK.COMMAND$
  2322.           USER.RESET.COMMAND$
  2323.  
  2324. Change CNFG-SUB.BAS as follows:
  2325.  
  2326. 60390 MACRO.DRVPATH$             = D$
  2327.       MACRO.EXTENSION$           = ""
  2328.       MAIN.COMMANDS.DEFAULTS$    = "ABCDEFIJKOPRSTUVW@"
  2329.       MAIN.COMMANDS$             = MAIN.COMMANDS.DEFAULTS$
  2330.       MAIN.FUNCTION$(1,1)        = "A)nswer questionnaire  "
  2331.       MAIN.FUNCTION$(2,1)        = "B)ulletins             "
  2332.       MAIN.FUNCTION$(3,1)        = "C)omments              "
  2333.       MAIN.FUNCTION$(4,1)        = "D)oor subsystem        "
  2334.       MAIN.FUNCTION$(5,1)        = "E)nter message         "
  2335.       MAIN.FUNCTION$(6,1)        = "F)iles subsystem       "
  2336.       MAIN.FUNCTION$(7,1)        = "I)nitial welcome       "
  2337.       MAIN.FUNCTION$(8,1)        = "J)oin a conference     "
  2338.       MAIN.FUNCTION$(9,1)        = "K)ill messages         "
  2339.       MAIN.FUNCTION$(10,1)       = "O)perator page         "
  2340.       MAIN.FUNCTION$(11,1)       = "P)ersonal mail         "
  2341.       MAIN.FUNCTION$(12,1)       = "R)ead messages         "
  2342.       MAIN.FUNCTION$(13,1)       = "S)can messages header  "
  2343.       MAIN.FUNCTION$(14,1)       = "T)opic msg scan        "
  2344.       MAIN.FUNCTION$(15,1)       = "U)tilities subsystem   "
  2345.       MAIN.FUNCTION$(16,1)       = "V)iew conference mail  "
  2346.       MAIN.FUNCTION$(17,1)       = "W)ho's on other nodes  "
  2347.       MAIN.FUNCTION$(18,1)       = "@)Library subsystem    "
  2348.       MAIN.FUNCTION$(1,2)        = "A"
  2349.       MAIN.FUNCTION$(2,2)        = "B"
  2350.       MAIN.FUNCTION$(3,2)        = "C"
  2351.       MAIN.FUNCTION$(4,2)        = "D"
  2352.       MAIN.FUNCTION$(5,2)        = "E"
  2353.       MAIN.FUNCTION$(6,2)        = "F"
  2354.       MAIN.FUNCTION$(7,2)        = "I"
  2355.       MAIN.FUNCTION$(8,2)        = "J"
  2356.       MAIN.FUNCTION$(9,2)        = "K"
  2357.       MAIN.FUNCTION$(10,2)       = "O"
  2358.       MAIN.FUNCTION$(11,2)       = "P"
  2359.       MAIN.FUNCTION$(12,2)       = "R"
  2360.       MAIN.FUNCTION$(13,2)       = "S"
  2361.       MAIN.FUNCTION$(14,2)       = "T"
  2362.       MAIN.FUNCTION$(15,2)       = "U"
  2363.       MAIN.FUNCTION$(16,2)       = "V"
  2364.       MAIN.FUNCTION$(17,2)       = "W"
  2365.       MAIN.MESSAGE.BACKUP$       = D$ + "MESSAGES.BAK"
  2366.       MAIN.MESSAGE.FILE$         = D$ + "MESSAGES"
  2367.       MAIN.PUI$                  = D$ + "MAIN.PUI"
  2368.       MAIN.USER.FILE$            = D$ + "USERS"
  2369.       MASTER.DIRECTORY.NAME$     = ""
  2370.       MAX.ALLOWED.MSGS.FRM.DEF   = 5
  2371.       MAX.CARRIER.WAIT           = 30
  2372.       MAX.DESC.LEN               = 40
  2373.       MAX.EXTENDED.LINES         = 2
  2374.       MAX.MESSAGE.LINES          = 19
  2375.       MAX.PER.DAY                = 0
  2376.       MAX.REG.SEC                = 0
  2377.       MAX.USR.FILE.SIZE.FRM.DEF  = 16
  2378.       MAX.WORK.VAR               = 30
  2379.       MAXD                       = 15
  2380.       MAXIMUM.DISPLAYABLE.PAGES  = 17
  2381.       MAXIMUM.PASSWORD.CHANGES   = 3
  2382.       MAXIMUM.VIOLATIONS         = 5
  2383.       MAXIMUM.NUMBER.OF.NODES    = 1
  2384.       MENU$(1)                   = D$ + "MENU1"
  2385.       MENU$(2)                   = D$ + "MENU2"
  2386.       MENU$(3)                   = D$ + "MENU3"
  2387.       MENU$(4)                   = D$ + "MENU4"
  2388.       MENU$(5)                   = D$ + "MENU5"
  2389.       MENU$(6)                   = D$ + "MENU6"
  2390.       MENUS.CAN.PAUSE            = TRUE
  2391.       MESSAGE.REMINDER           = TRUE
  2392.       MESSAGES.CAN.GROW          = FALSE
  2393.       MIN.NEWCALLER.BAUD         = 0
  2394.       MIN.OLDCALLER.BAUD         = 0
  2395.       MIN.SEC.TO.VIEW            = DEFAULT.SECURITY.LEVEL
  2396.       MINIMUM.LOGON.SECURITY     = 0
  2397.       MINIMUM.SECURITY.FOR.TEMP.PASSWORD = 5
  2398.       MINUTES.PER.SESSION!       = 72
  2399.       MLCOM                      = FALSE
  2400.       MM                         = 5
  2401.       MO$                        = DD$                               ' KG080901
  2402.       MUSIC                      = FALSE
  2403.       NET.MAIL$                  = "<none>"
  2404.       NETWORK.TYPE               = 0
  2405.       NETWORK.TYPE$              = "IBM's DOS"
  2406.       NEW.FILES.CHECK            = FALSE
  2407.       NEW.USER.QUESTIONNAIRE$    = D$ + "RBBS-REG.DEF"
  2408.       NEWUSER.FILE$              = D$ + "NEWUSER"
  2409.       NEWUSER.SETS.DEFAULTS      = TRUE
  2410.       OMIT.MAIN.DIRECTORY$       = "NO"
  2411.       OMIT.UPLOAD.DIRECTORY$     = "NO"
  2412.       OVERWRITE.SECURITY.LEVEL   = SYSOP.SECURITY.LEVEL
  2413.       PAGE.LENGTH                = 23
  2414.       PAGING.PRINTER.SUPPORT$    = ". "
  2415.       PASSWORD.FILE$             = D$ + "PASSWRDS"
  2416.       PCJR                       = FALSE
  2417.       PERSONAL.BEGIN             = 1
  2418.       PERSONAL.DIR$              = D$+"PRIV.DEF"
  2419.       PERSONAL.DRVPATH$          = D$
  2420.       PERSONAL.LEN               = 31
  2421.       PERSONAL.CONCAT            = FALSE
  2422.       PRELOG$                    = D$ + "PRELOG"
  2423.       PRIVATE.READ.SEC           = DEFAULT.SECURITY.LEVEL
  2424.       PROTO.DEF$                 = D$ + "PROTO.DEF"
  2425.       PROMPT.BELL                = 0
  2426.       PROMPT.HASH$               = "Name"
  2427.       PROMPT.INDIV$              = ""
  2428.       PS                         = 5
  2429.       PUBLIC.READ.SEC            = DEFAULT.SECURITY.LEVEL
  2430.       QUES.PATH$                 = D$
  2431.       RBBS.BAT$                  = D$ + "RBBS" + NODE.ID$ + ".BAT"
  2432.       RBBS.NAME$                 = "RBBS-PC"
  2433.       RCTTY.BAT$                 = D$ + "RCTTY" + NODE.ID$ + ".BAT"
  2434.       RECYCLE.TO.DOS             = 0
  2435.       RECYCLE.TO.DOS$            = "INTERNAL"
  2436.       RECYCLE.WAIT               = 0
  2437.       REDIRECT.IO.METHOD         = TRUE
  2438.       REGISTRATION.PROGRAM$      = "<none>"
  2439.       REMEMBER.NEW.USERS         = TRUE
  2440.       REMIND.FILE.TRANSFERS      = FALSE
  2441.       REMIND.PROFILE             = FALSE
  2442.       REQUIRE.NON.ASCII          = TRUE
  2443.       REQUIRED.QUESTIONNAIRE$    = "<none>"
  2444.       REQUIRED.RINGS             = 1
  2445.       RESTRICT.BAUD              = FALSE
  2446.       RESTRICT.BY.DATE           = FALSE
  2447.       RESTRICT.VALID.CMDS        = FALSE
  2448.       RTS$                       = "NO"
  2449.       SCREEN.OUT.MSG$            = "SEEN-BY: "
  2450.       SEC.CHANGE.MSG             = SYSOP.SECURITY.LEVEL
  2451.       SEC.LVL.EXEMPT.FRM.PURGING = SYSOP.SECURITY.LEVEL
  2452.       SECVIO.HLP$                = D$ + "SECVIO." + HELP.EXTENSION$
  2453.       SECURITY.EXEMPT.FROM.EPILOG= DEFAULT.SECURITY.LEVEL + 1
  2454.       SF                         = SYSOP.SECURITY.LEVEL
  2455.       SHOOT.YOURSELF             = FALSE
  2456.       SHOW.SECTION               = TRUE
  2457.       SIZE.OF.STACK              = 1024
  2458.       SL.CATEGORIZE.UPLOADS      = SYSOP.SECURITY.LEVEL
  2459.       SMART.TEXT                 = 123
  2460.       START.HASH                 = 1
  2461.       START.INDIV                = 0
  2462.       START.OFFICE.HOURS         = 800
  2463.       SURVIVE.NOUSER.ROOM        = FALSE
  2464.       SWITCH.BACK                = FALSE
  2465.       SYSOP.COMMANDS.DEFAULTS$   = "1234567"
  2466.       SYSOP.COMMANDS$            = SYSOP.COMMANDS.DEFAULTS$
  2467.       SYSOP.FUNCTION$(1,1)       = " 1 List comments      "
  2468.       SYSOP.FUNCTION$(2,1)       = " 2 List CALLERS log   "
  2469.       SYSOP.FUNCTION$(3,1)       = " 3 Recover a message  "
  2470.       SYSOP.FUNCTION$(4,1)       = " 4 Erase comments     "
  2471.       SYSOP.FUNCTION$(5,1)       = " 5 User maintenance   "
  2472.       SYSOP.FUNCTION$(6,1)       = " 6 Toggle Page bell   "
  2473.       SYSOP.FUNCTION$(7,1)       = " 7 Exit to DOS        "
  2474.       SYSOP.FUNCTION$(1,2)       = " 1"
  2475.       SYSOP.FUNCTION$(2,2)       = " 2"
  2476.       SYSOP.FUNCTION$(3,2)       = " 3"
  2477.       SYSOP.FUNCTION$(4,2)       = " 4"
  2478.       SYSOP.FUNCTION$(5,2)       = " 5"
  2479.       SYSOP.FUNCTION$(6,2)       = " 6"
  2480.       SYSOP.FUNCTION$(7,2)       = " 7"
  2481.       SYSOP.FIRST.NAME$          = "TOM"
  2482.       SYSOP.LAST.NAME$           = "MACK"
  2483.       SYSOP.MENU.SECURITY.LEVEL  = SYSOP.SECURITY.LEVEL
  2484.       SYSOP.PASSWORD.1$          = "RBBS-PC"
  2485.       SYSOP.PASSWORD.2$          = "CPC173"
  2486.       TIME.TO.DROP.TO.DOS        = 0
  2487.       TRASHCAN.FILE$             = D$ + "TRASHCAN"
  2488.       TURN.PRINTER.OFF           = FALSE
  2489.       TURBO.RBBS                 = TRUE
  2490.       UE                         = 5
  2491.       FMS.DIRECTORY$             = ""
  2492.       UPCAT.HELP$                = "UPCAT"
  2493.       UPLOAD.DIRECTORY$          = "99"
  2494.       UPLOAD.PATH$               = D$
  2495.       UPLOAD.SUBDIR$             = ""
  2496.       UPLOAD.TIME.FACTOR!        = 0
  2497.       UPLOAD.TO.SUBDIR           = FALSE
  2498.       USE.BASIC.WRITES           = FALSE
  2499.       USE.DEVICE.DRIVER$         = ""                                ' KG080901
  2500.       USER.LOCATION$             = "CITY and STATE"
  2501.       UTIL.COMMANDS.DEFAULTS$    = "BCEFGLMPRSTU"
  2502.       UTIL.COMMANDS$             = UTIL.COMMANDS.DEFAULTS$
  2503.       UTILITY.FUNCTION$(1,1)     = "B)aud rate            "
  2504.       UTILITY.FUNCTION$(2,1)     = "C)lock (time)         "
  2505.       UTILITY.FUNCTION$(3,1)     = "E)cho                 "
  2506.       UTILITY.FUNCTION$(4,1)     = "F)ile x-fer protocol  "
  2507.       UTILITY.FUNCTION$(5,1)     = "G)raphics             "
  2508.       UTILITY.FUNCTION$(6,1)     = "L)ines per page       "
  2509.       UTILITY.FUNCTION$(7,1)     = "M)sg margin setting   "
  2510.       UTILITY.FUNCTION$(8,1)     = "P)assword change      "
  2511.       UTILITY.FUNCTION$(9,1)     = "R)eview defaults      "
  2512.       UTILITY.FUNCTION$(10,1)    = "S)tatistics           "
  2513.       UTILITY.FUNCTION$(11,1)    = "T)oggle               "
  2514.       UTILITY.FUNCTION$(12,1)    = "U)ser log scan        "
  2515.       VOICE.TYPE                 = 0
  2516.       VOICE.TYPE$                = NONE.PICKED$
  2517.       XON.XOFF                   = FALSE
  2518.       FOR I = 1 TO LEN(UTIL.COMMANDS.DEFAULTS$)
  2519.          UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS.DEFAULTS$,I,1)
  2520.       NEXT
  2521.       WAIT.BEFORE.DISCONNECT     = 180
  2522.       WELCOME.FILE$              = D$ + "WELCOME"
  2523.       WELCOME.INTERRUPTABLE      = TRUE
  2524.       WILL.SUBDIRS.B.USED        = FALSE
  2525.       WRITE.BUF.DEF              = 1024
  2526.       FOR I = 1 TO NUM.SYSOP
  2527.          SYSOP.FUNCTION(I) = SF
  2528.       NEXT
  2529.       FOR I = 1 TO NUM.MAIN
  2530.          MAIN.FUNCTION(I) = MM
  2531.       NEXT
  2532.       FOR I = 1 TO NUM.FILES
  2533.          FILES.FUNCTION(I) = FC
  2534.       NEXT
  2535.       FOR I = 1 TO NUM.LIBRARY
  2536.          LIBRARY.FUNCTION(I) = PS
  2537.       NEXT
  2538.       FOR I = 1 TO NUM.UTILITY
  2539.          UTILITY.FUNCTION(I) = UE
  2540.       NEXT
  2541.       FOR I = 1 TO NUM.GLOBAL
  2542.          GLOBAL.FUNCTION(I) = GB
  2543.       NEXT
  2544.       CALL MODEMINITCMD
  2545.       END SUB
  2546. '  $SUBTITLE: 'VOICETYPE - subroutine to select voice'
  2547. '  $PAGE
  2548. '
  2549. '  SUBROUTINE NAME    --  VOICETYPE
  2550. '
  2551. '  INPUT PARAMETERS   --  VOICE.TYPE
  2552. '                         VOICE.TYPE$
  2553. '                         SUBROUTINE.PARAMETER
  2554. '
  2555. '  OUTPUT PARAMETERS  --  VOICE.TYPE
  2556. '                         VOICE.TYPE$
  2557. '
  2558. '  SUBROUTINE PURPOSE --  TO SELECT THE RBBS-PC SUPPORTED VOICE
  2559. '                         SYNTHESIZERS
  2560. '
  2561.       SUB VOICETYPE STATIC
  2562.       ON SUBROUTINE.PARAMETER GOTO 60482,60484
  2563.  
  2564. 62100 ' set modem strings by selecting a modem
  2565.       SUB SELMODEM STATIC
  2566.       CALL FINDFILE ("MODEMS.SET",OK)
  2567.       IF OK THEN _
  2568.          GOTO 62103                                                  ' DA080503
  2569.       CALL MODEMINITCMD                                              ' KG080901
  2570.       EXIT SUB                                                       ' DA080503
  2571.  
  2572. 62120 SUB MODEMINITCMD STATIC                                        ' KG080901
  2573.       RTS$ = "NO"                                                    ' DA080503
  2574.       MODEM.INIT.WAIT.TIME = 3                                       ' DA080503
  2575.       COMMANDS.BETWEEN.RINGS = FALSE                                 ' DA080503
  2576.       FIRMWARE.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0&T5"       ' DA080503
  2577.       FIRMWARE.CLEAR.COMMAND$ = "AT&F"                               ' DA080503
  2578.       FIRMWARE.WRITE.COMMAND$ = "AT&W"                               ' DA080503
  2579.       KEEP.INIT.BAUD = FALSE                                         ' DA080503
  2580.       MODEM.ANSWER.COMMAND$      = "ATQ0X1V1A"
  2581.       MODEM.COMMAND.DELAY.TIME   = 1
  2582.       MODEM.COUNT.RINGS.COMMAND$ = "ATS1?"
  2583.       MODEM.GO.OFFHOOK.COMMAND$  = "ATH1M0"                          ' DA080503
  2584.       'MODEM.GO.OFFHOOK.COMMAND$  = "ATQ1E1H1M0"
  2585.       MODEM.INIT.BAUD$           = "300"
  2586.       MODEM.INIT.COMMAND$        = "ATE0M0Q0V1X1S0=254S2=255S10=20"  ' DA080503
  2587.       'MODEM.INIT.COMMAND$        = "ATM0Q1S2=255S10=30E0Q0X1S0=254  "
  2588.       MODEM.RESET.COMMAND$       = "ATZ"
  2589.       USER.INITIALIZE.COMMAND$   = "AT&C1&D3B1E0V1M0S0=0"            ' DA080503
  2590.       'USER.INITIALIZE.COMMAND$   = "AT&C1&D3B1E0V1M0S0=0&T5"
  2591.       'USER.FIRMWARE.WRITE.CMND$  = "&W"
  2592.       USER.ANSWER.COMMAND$ = MODEM.ANSWER.COMMAND$                   ' DA080503
  2593.       USER.COUNT.RINGS.COMMAND$ = MODEM.COUNT.RINGS.COMMAND$         ' DA080503
  2594.       USER.GO.OFFHOOK.COMMAND$ = MODEM.GO.OFFHOOK.COMMAND$           ' DA080503
  2595.       USER.INIT.COMMAND$ = MODEM.INIT.COMMAND$                       ' DA080503
  2596.       USER.RESET.COMMAND$ = MODEM.RESET.COMMAND$                     ' DA080503
  2597.       USER.INITIALIZE.COMMAND$ = FIRMWARE.INITIALIZE.COMMAND$        ' DA080503
  2598.       USER.FIRMWARE.CLEAR.CMND$ = FIRMWARE.CLEAR.COMMAND$            ' DA080503
  2599.       USER.FIRMWARE.WRITE.CMND$ = FIRMWARE.WRITE.COMMAND$            ' DA080503
  2600.       END SUB                                                        ' KG080901
  2601.  
  2602. ------------------------[ ML080801 ]-------------------------
  2603.  
  2604. Problem:  Sometimes RBBS not dropping to DOS when it should.
  2605.  
  2606. Solution:  Change RBBSSUB3.BAS as follows:
  2607.  
  2608. (line 41010)
  2609.  
  2610.       SUB TimeRemain (MinsRemaining) STATIC
  2611.       TOA! = FRE("A")
  2612.       IF ZBypassTimeCheck THEN _
  2613.          MinsRemaining = ZSecsPerSession! / 60 : _
  2614.          EXIT SUB
  2615.       CALL CheckTime (ZUserLogonTime!, ZSecsUsedSession!, 2)
  2616.       IF ZTimeToDropToDos! = 0 OR _
  2617.          ZOldDate$ = DATE$ THEN _
  2618.          GOTO 41020
  2619.       CALL CheckTime (ZTimeToDropToDos!, HowMuchTimeLeft!, 1)
  2620.       IF HowMuchTimeLeft! < 0 THEN _                                 ' ML080801
  2621.          HowMuchTimeLeft! = (HowMuchTimeLeft! * -1) + 43200          ' ML080801
  2622.       IF (ZSecsPerSession! - ZSecsUsedSession!) > HowMuchTimeLeft! THEN _ ' DA080101
  2623.          ZSecsPerSession! = HowMuchTimeLeft! + ZSecsUsedSession! : _ ' DA080101
  2624.          IF NOT ToldShort THEN _
  2625.             ToldShort = ZTrue : _
  2626.             ZOutTxt$ = "Shortened session time to" + _               ' DA080101
  2627.                 STR$(INT((ZSecsPerSession! - ZSecsUsedSession!) / 60)) + _ ' DA080101
  2628.                 " min for scheduled event" : _                       ' DA080101
  2629.             CALL RingCaller
  2630.  
  2631. ------------------------[ ML080801 ]-------------------------
  2632.  
  2633. Problem:  RBBS can object to an upload because have file with same prefix
  2634. but different extension.   In which case, if uploader can overwrite, RBBS
  2635. asks if want to overwrite, yet file will NOT be overwritten and RBBS will
  2636. trap an error if the uploaded file does not exist.
  2637.  
  2638. Solution:  Tell file already have and ask if want to upload anyway.   If
  2639. file try to kill is not there, just permit upload.
  2640.  
  2641. Change RBBSSUB5.BAS as follows:
  2642.  
  2643. 20450 IF Extension$ <> Check$ THEN _
  2644.          CALL RotorsDir (WasX$ + "." + Check$,ZSubDir$(),ZSubDirCount,ZTrue,"U") : _ ' KG021802
  2645.          IF ZOK THEN _
  2646.             ExtSrch = ZTrue : _                                      ' ML080601
  2647.             GOTO 20452
  2648.       GOTO 20447
  2649. 20451 ZOutTxt$ = "Invalid file name <" + ZFileName$ + ">"
  2650.       GOTO 20395
  2651. 20452 IF ZUserSecLevel < ZOverWriteSecLevel THEN _
  2652.          GOTO 20453
  2653.       IF ExtSrch AND (WasX$ + "." + Check$) <> ZFileName$ THEN _     ' ML080601
  2654.          ZOutTxt$ = WasX$ + "." + Check$ + " already here, " + _     ' ML080601
  2655.                     "upload anyway (Y,[N])" _                        ' ML080601
  2656.       ELSE ZOutTxt$ = "Overwrite file (Y,[N])"                       ' ML080601
  2657.       GOSUB 21660
  2658.       IF ZFileSysParm > 1 THEN _
  2659.          RETURN
  2660.       IF NOT ZYes THEN _
  2661.          GOTO 20453
  2662.       ZWasZ$ = ZFileName$
  2663.       CALL KillWork (ZFileName$)
  2664.       IF ZErrCode <> 0 AND ZErrCode <> 53 THEN _                     ' ML080601
  2665.          ZOutTxt$ = "Unable to overwrite" : _                        ' ML080601
  2666.          GOSUB 21660 : _                                             ' ML080601
  2667.          RETURN                                                      ' ML080601
  2668.       GOTO 20475
  2669.  
  2670. 21900 IF ZDebug THEN _
  2671.          ZOutTxt$ = "RBBSSUB5 DEBUG Error Trap Entry ERL=" + _
  2672.               STR$(ZWasEL) + _
  2673.               " ERR=" + _
  2674.               STR$(ZErrCode) : _
  2675.          IF ZPrinter THEN _
  2676.             CALL Printit(ZOutTxt$) _
  2677.          ELSE CALL LPrnt(ZOutTxt$,1)
  2678.       IF ZWasEL = 20126 AND ZErrCode = 53 THEN _
  2679.          GOTO 20142
  2680.       IF ZWasEL = 20242 AND ZErrCode = 62 THEN _
  2681.          CALL UpdtCalr (ZFileSecFile$ + " bad format!",2) : _
  2682.          GOTO 20247
  2683.       IF ZWasEL = 20263 THEN _
  2684.          ZOutTxt$ = "<Download aborted>" : _
  2685.          DnldCompleted = ZFalse : _
  2686.          GOTO 20390                                                  ' ML080601
  2687.       IF ZWasEL = 20560 AND ZErrCode = 67 THEN _
  2688.          GOTO 20451
  2689.       IF ZWasEL = 20560 AND ZErrCode = 70 THEN _
  2690.          IF VAL(ZFreeSpace$) > 1999 THEN _
  2691.             GOTO 20610 _
  2692.          ELSE CALL QuickTPut1 ("No room for uploads. Try tomorrow.") : _
  2693.               GOTO 21700
  2694.       IF ZWasEL = 20620 THEN _
  2695.          GOTO 20670
  2696.       IF ZWasEL = 20650 THEN _
  2697.          GOTO 20670
  2698.       IF ZWasEL = 20736 AND ZErrCode = 53 THEN _
  2699.          GOTO 21700
  2700.       IF ZWasEL = 20900 AND ZErrCode = 75 THEN _
  2701.          GOTO 21230
  2702.       IF ZWasEL = 20900 AND ZErrCode = 70 THEN _
  2703.          CALL QuickTPut1 ("No room for uploads. Try tomorrow.") : _
  2704.          GOTO 21230
  2705.       IF ZWasEL = 21131 OR ZWasEL = 21220 THEN _
  2706.          ZErrCode = 0 : _
  2707.          GOTO 21230
  2708.       IF ZWasEL = 21480 THEN _
  2709.          CALL LogError : _
  2710.          IF ZErrCode = 57 THEN _
  2711.             CALL QuickTPut1 ("Error reading file.  Aborting download") : _
  2712.             DnldCompleted = ZFalse : _
  2713.             GOTO 21230
  2714.  
  2715. ------------------------[ DA080503 ]-------------------------
  2716.  
  2717. Problem:  Make it easier for person to select a modem's configuration
  2718. parameters by displaying a screen full rather than one at a time,
  2719. and add two more important communications parameters to
  2720. setting in MODEMS.SET - baud rate to open, whether lock baud rate.
  2721. Also, code changed to allow S0 parm in modem commands to be anywhere
  2722. in the string.
  2723.  
  2724. Change CONFIG.BAS as follows:
  2725.  
  2726. 13228 A$ = ""
  2727.       IF INSTR(USER.INIT.COMMAND$,"S0=") = 0 THEN _                  ' DA080503
  2728.          USER.INIT.COMMAND$ = USER.INIT.COMMAND$ + "S0=001"          ' DA080503
  2729.  
  2730. 13229 CALL GETINIT ("How many rings should RBBS-PC wait before answering? ",24,0,255,REQUIRED.RINGS,CR)
  2731.       IF CR THEN _
  2732.          GOTO 13229
  2733.       IF REQUIRED.RINGS = 0 THEN _
  2734.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3) = "001" ' DA080503
  2735.          RETURN
  2736.  
  2737. 13235 IF REQUIRED.RINGS > 5 THEN _
  2738.          A$ = "(<6 for ringback)" : _
  2739.          GOTO 13229
  2740.       MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3) = "255" ' DA080503
  2741.       RETURN
  2742.  
  2743. 13237 MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3) = "254" ' DA080503
  2744.       RETURN
  2745.  
  2746. 15710 CLS
  2747.       GOSUB 15780
  2748.       PRINT "         Currently Specified Modem Commands are:"
  2749.       PRINT
  2750.       PRINT "  Note:  '{' means embed carriage return  '~' means delay 1 sec"
  2751.       PRINT
  2752.       PRINT "1. Reset the modem                : " + USER.RESET.COMMAND$
  2753.       PRINT ""
  2754.       PRINT "2. Initialize the modem           : " + USER.INIT.COMMAND$
  2755.       PRINT "   Note: Item 2 MUST contain one of the following:"          ' DA080503
  2756.       PRINT "            S0=001  (to answer on 0 rings)"                  ' DA080503
  2757.       PRINT "            S0=254  (to answer on >0 rings, no ring-back)"   ' DA080503
  2758.       PRINT "            S0=255  (to answer on >0 rings, with ring-back"
  2759.       PRINT ""
  2760.       PRINT "3. Count the number of rings      : " + USER.COUNT.RINGS.COMMAND$
  2761.       PRINT ""
  2762.       PRINT "4. Answer the phone               : " + USER.ANSWER.COMMAND$
  2763.       PRINT ""
  2764.       PRINT "5. Take the phone off the hook    : " + USER.GO.OFFHOOK.COMMAND$
  2765.       PRINT ""
  2766.       PRINT "6. Clear the modem's firmware     : " + USER.FIRMWARE.CLEAR.CMND$
  2767.       PRINT ""
  2768.       PRINT "7. Initialize modem's firmware    : " + USER.INITIALIZE.COMMAND$ ' DA080503
  2769.       PRINT ""
  2770.       PRINT "8. Write to modem's firmware      : " + USER.FIRMWARE.WRITE.CMND$
  2771.       CALL GETINIT ("Command to change (1 to 8), CR to end, or 0 to reset to defaults",24,0,8,I,CR)
  2772.       IF CR THEN _
  2773.          RETURN
  2774.       IF I <> 0 THEN _
  2775.          GOTO 15711
  2776.       GOSUB 15790
  2777.       GOTO 15710
  2778.  
  2779. 15790 CALL SELMODEM                                                  ' DA080503
  2780.       RETURN
  2781.  
  2782. Change CNFG-SUB.BAS as follows:
  2783.  
  2784. 12500 DISPLAYED.PAGE.NUMBER = 12
  2785.       GOSUB 24800
  2786.       LOCATE 3,1
  2787.       PRINT "221. Communications port to be used by RBBS-PC ---- " + COM.PORT$
  2788.       PRINT "222. # of seconds to wait for modem to initialize -" + STR$(MODEM.INIT.WAIT.TIME)
  2789.       PRINT "223. Seconds to wait before issuing modem commands-" + STR$(MODEM.COMMAND.DELAY.TIME)
  2790.       PRINT "224. Number of rings to wait before answering -----" + STR$(REQUIRED.RINGS);
  2791.       IF INSTR(USER.INIT.COMMAND$, "S0=255") > 0 THEN _              ' DA080503
  2792.          PRINT " RING BACK";
  2793.       PRINT
  2794.       PRINT "225. Set the modem commands"
  2795.       PRINT "226. ---------------------------------------------- "
  2796.       PRINT "227. Issue modem commands between rings ----------- " ; FNYESNO$(COMMANDS.BETWEEN.RINGS)
  2797.       PRINT "228. Baud rate to initially open modem at --------- " + MODEM.INIT.BAUD$
  2798.       X$ = STR$(WAIT.BEFORE.DISCONNECT) + " seconds"
  2799.       IF WAIT.BEFORE.DISCONNECT = 0 THEN _
  2800.          X$ = "NO"
  2801.       PRINT "229. Log off user who are idle for ----------------" + X$
  2802.       PRINT "230. Are you using a 'DUMB' auto-answer modem? ---- " ; FNYESNO$(DUMB.MODEM)
  2803.       PRINT "231. Initialize modem firmware for RBBS-PC."
  2804.       PRINT "232. # seconds to wait after dropping DTR ---------"  + STR$(DTR.DROP.DELAY)
  2805.       PRINT "233. File with PROTOCOL definitions --------------- " + PROTO.DEF$
  2806.       PRINT "234. Always check caller for AUTODOWNLOAD support - " ; FNYESNO$(ASK.IDENTITY)
  2807.       PRINT "235. Require non-ascii protocol for BASIC files --- " ; FNYESNO$(REQUIRE.NON.ASCII)
  2808.       X$ = STR$(RECYCLE.WAIT) + " minutes"
  2809.       IF RECYCLE.WAIT = 0 THEN _
  2810.          X$ = "<Don't recycle>"
  2811.       PRINT "236. Recycle if no calls are received within ------" + X$
  2812.       PRINT "237. Leave modem at initial baud ------------------ " + FNYESNO$(KEEP.INIT.BAUD)
  2813.       GOTO 12580
  2814.  
  2815. 62100 ' set modem strings by selecting a modem
  2816.       SUB SELMODEM STATIC
  2817.       CALL FINDFILE ("MODEMS.SET",OK)
  2818.       IF OK THEN _
  2819.          GOTO 62103                                                  ' DA080503
  2820.       CALL MODEMINITCMD                                              ' KG080901
  2821.       EXIT SUB                                                       ' DA080503
  2822. 62103 CLOSE 2                                                        ' DA080503
  2823.       IF NETWORK.TYPE = 6 THEN _                                     ' DA080503
  2824.          OPEN "MODEMS.SET" FOR INPUT SHARED AS #2 _                  ' DA080503
  2825.       ELSE OPEN "I",2,"MODEMS.SET"                                   ' DA080503
  2826.       MODEM.MODEL = 0
  2827. 62105 CLS                                                            ' DA080503
  2828.       PRINT "NUMBER";
  2829.       LOCATE 1,10
  2830.       PRINT "Modem Model";
  2831.       LOCATE 1,40
  2832.       PRINT "Switch Settings";
  2833.       LOCATE 2,1
  2834.       PRINT STRING$(78,"-");
  2835.       FOR DISPLAY.LINE = 3 TO 19
  2836.          IF EOF(2) THEN _
  2837.             MODEM.PAGE = 0 : _
  2838.             GOTO 62110
  2839.          MODEM.MODEL = MODEM.MODEL + 1
  2840.          INPUT #2, MODEM.MODEL$, SWITCHES$
  2841.          FOR I = 1 TO 14                    ' # MODEMS.SET parms - 2
  2842.             INPUT #2,GARBAGE$
  2843.          NEXT
  2844.          LOCATE DISPLAY.LINE, 2
  2845.          PRINT MODEM.MODEL;
  2846.          LOCATE DISPLAY.LINE, 10
  2847.          PRINT MODEM.MODEL$;
  2848.          LOCATE DISPLAY.LINE, 40
  2849.          PRINT SWITCHES$;
  2850.       NEXT
  2851.       MODEM.MODEL = MODEM.MODEL + 1
  2852.       MODEM.PAGE = MODEM.MODEL
  2853.       LOCATE DISPLAY.LINE + 1, 2
  2854.       PRINT " 0"
  2855.       LOCATE DISPLAY.LINE + 1, 10
  2856.       PRINT "Next Page"
  2857. 62110 LOCATE 24,10                                                   ' DA080503
  2858.       PRINT "Use Parameter 231 to initialize modem's firmware";
  2859.       CALL GETINIT("Select modem number, or [ENTER] to exit", _
  2860.                     22,0,MODEM.MODEL,MODEM.SELECTED, CR)
  2861.       IF CR THEN _
  2862.          EXIT SUB
  2863.       IF MODEM.SELECTED = 0 THEN _
  2864.          MODEM.MODEL = MODEM.MODEL - 1 : _
  2865.          GOTO 62105
  2866.       CLOSE 2
  2867.       IF NETWORK.TYPE = 6 THEN _
  2868.          OPEN "MODEMS.SET" FOR INPUT SHARED AS #2 _
  2869.       ELSE OPEN "I",2,"MODEMS.SET"
  2870.       FOR I = 1 TO (MODEM.SELECTED - 1) * 16      ' # of parms * modem
  2871.          INPUT #2,GARBAGE$
  2872.       NEXT
  2873.       INPUT #2, MODEM.MODEL$, _
  2874.                 SWITCHES$, _
  2875.                 USER.ANSWER.COMMAND$, _
  2876.                 USER.COUNT.RINGS.COMMAND$, _
  2877.                 USER.GO.OFFHOOK.COMMAND$, _
  2878.                 USER.INIT.COMMAND$, _
  2879.                 USER.RESET.COMMAND$, _
  2880.                 USER.INITIALIZE.COMMAND$, _
  2881.                 USER.FIRMWARE.CLEAR.CMND$, _
  2882.                 USER.FIRMWARE.WRITE.CMND$, _
  2883.                 RTS$, _
  2884.                 MODEM.INIT.WAIT.TIME, _
  2885.                 MODEM.COMMAND.DELAY.TIME, _
  2886.                 COMMANDS.BETWEEN.RINGS, _
  2887.                 MODEM.INIT.BAUD$, _
  2888.                 KEEP.INIT.BAUD
  2889.       CLOSE 2
  2890.       END SUB
  2891. ------------------------[ DA080502 ]-------------------------
  2892.  
  2893. Problem:  As a aid in seeing whether the modem firmware initialization
  2894. took, display any modem response.  Also, support pause (~) and carriage-
  2895. return ({) substitution in firmware initialization.
  2896.  
  2897. 23731 LOCATE 25,5
  2898.       COMPORT% = VAL(RIGHT$(COM.PORT$,1)) -1
  2899.       IF COMPORT% < 0 THEN _
  2900.          PRINT "COM port cannot be set while using COM0" : _
  2901.          DELAY! = FNTI! + 3 : _
  2902.          GOSUB 60440 : _
  2903.          RETURN
  2904.       FOS.BUF$ = SPACE$(80)                                          ' DA080502
  2905.       CLS                                                            ' DA080502
  2906.       PRINT "Setting modem firmware for RBBS-PC on " + COM.PORT$     ' DA080502
  2907.       IF NOT FOSSIL THEN _                                           ' DA080502
  2908.          GOTO 23732                                                  ' DA080502
  2909.       CALL FOSINIT(COMPORT%,RESULT%)                                 ' DA080502
  2910.       IF RESULT% = -1 THEN _                                         ' DA080502
  2911.          PRINT "ERROR initializing FOSSIL.  Firmware reset aborted." : _  ' DA080502
  2912.          GOTO 23736                                                  ' DA080502
  2913.       CALL FOSSPEED(COMPORT%,2400, 2, 3, 1)                          ' DA080502
  2914.       STATE% = 1                                                     ' DA080502
  2915.       CALL FOSDTR(COMPORT%,STATE%)                                   ' DA080502
  2916.       GOTO 23733                                                     ' DA080502
  2917. '
  2918. '
  2919. ' * WHEN INITIALIZING THE HAYES 2400 VOLITILE MEMORY, SET THE FOLLOWING:
  2920. '
  2921. ' *           &C1       = Indicate carrier detect if user is on-line
  2922. ' *           &D3       = Use these settings when DTR drops
  2923. ' *           B1        = Use Bell 212A when 1200 Baud is detected
  2924. ' *           E0        = Do not echo modem commands back to the PC
  2925. ' *           V1        = Issue long form of results codes
  2926. ' *           M0        = Disable the speaker
  2927. '
  2928. '
  2929. 23732 OUT MODEM.CONTROL.REGISTER,&H0                                 ' DA080501
  2930.       OUT LINE.CONTROL.REGISTER - 1,&H6                              ' DA080501
  2931.       OPEN COM.PORT$ + ":2400,N,8,1,CD,DS" AS #3                     ' DA080502
  2932. 23733 A$ = USER.FIRMWARE.CLEAR.CMND$ ' Clear to factory defaults     ' DA080502
  2933.       GOSUB 23736                                                    ' DA080502
  2934.       A$ = USER.INITIALIZE.COMMAND$  ' set up RBBS-PC config         ' DA080502
  2935.       GOSUB 23736                                                    ' DA080502
  2936.       A$ = USER.FIRMWARE.WRITE.CMND$ ' Write changes to NVRam        ' DA080502
  2937.       GOSUB 23736                                                    ' DA080502
  2938.       IF FOSSIL THEN _                                               ' DA080502
  2939.          STATE% = 0 : _                                              ' DA080502
  2940.          CALL FOSDTR(COMPORT%,STATE%) : _                            ' DA080502
  2941.          CALL FOSEXIT(COMPORT%) : _                                  ' DA080502
  2942.       ELSE CLOSE #3                                                  ' DA080502
  2943.       PRINT "Press a key to continue"                                ' DA080502
  2944.       WHILE INKEY$ = "" : WEND                                       ' DA080502
  2945.       RETURN                                                         ' DA080502
  2946. '                                                                    ' DA080502
  2947. ' * ROUTINE TO SEND/RECEIVE DATA FROM MODEM                          ' DA080502
  2948. '                                                                    ' DA080502
  2949. 23736 PRINT "Send:"                                                  ' DA080502
  2950.       WHILE INSTR(A$, "{")                                           ' DA080502
  2951.          CR.FOUND = INSTR(A$,"{")                                    ' DA080502
  2952.          A$ = LEFT$(A$, CR.FOUND - 1) + CHR$(13) + CHR$(10) + _      ' DA080502
  2953.               MID$(A$, CR.FOUND + 1)                                 ' DA080502
  2954.       WEND                                                           ' DA080502
  2955.       WHILE INSTR(A$, "~")                                           ' DA080502
  2956.          WAIT.FOUND = INSTR(A$,"~")                                  ' DA080502
  2957.          TEMP.A$ = MID$(A$, WAIT.FOUND + 1)                          ' DA080502
  2958.          A$ = LEFT$(A$, WAIT.FOUND - 1)                              ' DA080502
  2959.          GOSUB 23739                                                 ' DA080502
  2960.          DELAY! = FNTI! + 1                                          ' DA080502
  2961.          GOSUB 60440                                                 ' DA080502
  2962.          A$ = TEMP.A$                                                ' DA080502
  2963.       WEND                                                           ' DA080502
  2964.       A$ = A$ + CHR$(13) + CHR$(10)                                  ' DA080502
  2965.       GOSUB 23739                                                    ' DA080502
  2966.       DELAY! = FNTI! + 3                                             ' DA080502
  2967.       GOSUB 60440                                                    ' DA080502
  2968.       PRINT "Receive:"                                               ' DA080502
  2969.       IF NOT FOSSIL THEN _                                           ' DA080502
  2970.          GOTO 23738                                                  ' DA080503
  2971.       FOS.LEN% = 80                                                  ' DA080503
  2972.       CALL FOSREAD(COMPORT%, FOS.LEN%, FOS.BUF$)                     ' DA080502
  2973.       PRINT LEFT$(FOS.BUF$,FOS.LEN%)                                 ' DA080503
  2974.       RETURN                                                         ' DA080502
  2975. 23738 WHILE LOC(3) > 1                                               ' DA080502
  2976.          INPUT #3, A$                                                ' DA080502
  2977.          PRINT A$                                                    ' DA080502
  2978.       WEND                                                           ' DA080502
  2979.       RETURN                                                         ' DA080502
  2980. 23739 PRINT A$;                                                      ' DA080502
  2981.       IF NOT FOSSIL THEN_                                            ' DA080502
  2982.          PRINT #3, A$; _                                             ' DA080502
  2983.       ELSE _                                                         ' DA080502
  2984.          CALL FOSWRITE(COMPORT%,LEN(A$),A$)                          ' DA080502
  2985.       RETURN                                                         ' DA080502
  2986. '
  2987. ' * ROUTINE TO RENUMBER THE MESSAGE FILE
  2988. '
  2989.  
  2990. ------------------------[ DA080501 ]-------------------------
  2991.  
  2992. Problem:  Config will not properly initialize modem's firmware when
  2993. have 16550 UART chip with FIFO enabled, on some systems (not all).
  2994.  
  2995. Solution:  Disable FIFO.  Change 
  2996.  
  2997. 23732 OUT MODEM.CONTROL.REGISTER,&H0                                 ' DA080501
  2998.       OUT LINE.CONTROL.REGISTER - 1,&H6                              ' DA080501
  2999.       OPEN COM.PORT$ + ":2400,N,8,1,CD,DS" AS #3                     ' DA080502
  3000.  
  3001. ------------------------[ KG080701 ]-------------------------
  3002.  
  3003. Problem:  Possible to get continuous looping in conference
  3004. view command when doing non-stop.  Also, erratic skipping
  3005. when caller not in various conferences.  Redundant line of
  3006. code eliminated.
  3007.  
  3008. Change RBBSSUB4.BAS as follows:
  3009.  
  3010. 59852 IF NOT ZOK THEN _
  3011.          GOTO 59854 _                                                ' KG072101
  3012.       ELSE IF EOF(2) THEN _                                          ' KG072101
  3013.               IF LogicalEOF$ = "" OR SkipParms = 0 THEN _            ' KG073104
  3014.                  GOTO 59854 _                                        ' KG072101
  3015.               ELSE CALL FindIt (ZConfMailList$) : _                  ' KG072101
  3016.                    SkipParms = 0 : _                                 ' KG072901
  3017.                    GOTO 59852                                        ' KG072101
  3018.          CALL ReadAny
  3019.          ZActiveUserFile$ = ZOutTxt$
  3020.          CALL ReadAny
  3021.          IF ZErrCode > 0 THEN _
  3022.             GOTO 59854
  3023.          SkipParms = SkipParms + 2                                   ' KG080701
  3024.          ZActiveMessageFile$ = ZOutTxt$                              ' KG072901
  3025.          CALL FindFile (ZActiveUserFile$,ZOK)
  3026.          IF NOT ZOK THEN _
  3027.             GOTO 59854
  3028.          CALL OpenUser (HighestUserRecord)
  3029.          FIELD 5, 128 AS ZUserRecord$
  3030.          CALL FindFile (ZActiveMessageFile$,ZOK)
  3031.          IF NOT ZOK THEN _
  3032.             GOTO 59854
  3033.          CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
  3034.                         0,0,HighestUserRecord,_
  3035.                         Found,HoldUserFileIndex,ZWasSL)
  3036.          IF NOT Found THEN _
  3037.             GOTO 59853                                               ' KG080701
  3038.          CALL OpenMsg
  3039.          FIELD 1, 128 AS ZMsgRec$
  3040.          GET 1,1
  3041.          AnyMail = ZTrue
  3042.          WasX = CVI(MID$(ZUserRecord$,57,2))
  3043.          WasX = (WasX AND 512) > 0
  3044.          CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
  3045.          InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
  3046.          IF InCur THEN _
  3047.             WasX = ZMailWaiting : _                                  ' KG030101
  3048.             ZWasA = ZLastMsgRead _
  3049.          ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
  3050.          ZWasB = VAL(LEFT$(ZMsgRec$,8))
  3051.          WasZ = (ZWasB - ZWasA)
  3052.          IF WasZ < 0 THEN _
  3053.             ZWasA = 0 : _
  3054.             WasZ = ZWasB _
  3055.          ELSE IF WasZ = 0 THEN _
  3056.                  WasX = ZFalse
  3057.          ZOutTxt$ = MID$(STR$((ZWasB > ZWasA) * WasZ),2)
  3058.          ZWasSL = LEN(ZOutTxt$)
  3059.          ZOutTxt$ = SPACE$(-(ZWasSL<4) * (4-ZWasSL)) + ZOutTxt$
  3060.          ZWasSL = LEN(CurPre$)
  3061.          IF CurPre$ = "USERS" AND CurExt$ = "" THEN _
  3062.             Conf$ = "MAIN" _
  3063.          ELSE Conf$ = LEFT$(CurPre$,ZWasSL-1)
  3064.          ZWasY$ = Conf$ + SPACE$(-(ZWasSL<8) * (8-ZWasSL))
  3065.          IF WasX THEN _
  3066.             WasX$ = ZEmphasizeOn$ : _
  3067.             ZWasZ$ = ZEmphasizeOff$ _
  3068.          ELSE WasX$ = "" : _
  3069.               ZWasZ$ = ""
  3070.          ZOutTxt$ = ZWasY$ + ": " + ZOutTxt$ + " new message(s): " + _
  3071.               WasX$ + MID$(" None *Some*",-6 * WasX + 1,6) + " to you" + ZWasZ$
  3072.          ZSubParm = 5
  3073.          CALL TPut
  3074.          IF SkipJoinUnjoin THEN _
  3075.             CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) : _
  3076.             GOTO 59853                                               ' KG080701
  3077.          ZTurboKey = -ZTurboKeyUser
  3078.          CALL AskMore (",J)oin,U)njoin",ZTrue,ZFalse,WasX,ZFalse)
  3079.          IF ZNo THEN _
  3080.             GOTO 59854
  3081.          WasX$ = LEFT$(ZUserIn$(1),1)
  3082.          CALL AllCaps (WasX$)
  3083.          IF WasX$ = "J" THEN _
  3084.             ZHomeConf$ = Conf$ : _
  3085.             GOTO 59854
  3086.          IF WasX$ = "U" THEN _
  3087.             IF InCur OR (OrigPre$ = CurPre$ AND OrigExt$ = CurExt$) THEN _
  3088.                CALL QuickTPut1 ("Can't omit yourself from the board or conference you're in") _
  3089.             ELSE LSET ZUserRecord$ = CHR$(0) + "deleted user" : _
  3090.                  ZUserFileIndex = HoldUserFileIndex : _
  3091.                  ZSubParm = 6 : _
  3092.                  CALL FileLock : _
  3093.                  PUT 5, HoldUserFileIndex : _
  3094.                  ZSubParm = 8 : _
  3095.                  CALL FileLock : _
  3096.                  CALL QuickTPut1 ("Omitted you from " + Conf$)       ' KG073104
  3097. 59853 IF ZActiveMessageFile$ = LogicalEOF$ THEN _                    ' KG073104
  3098.          GOTO 59854                                                  ' KG073104
  3099.       IF NOT ZRet THEN _                                             ' KG073104
  3100.          GOTO 59852                                                  ' KG080701
  3101.  
  3102. ------------------------[ KG080601 ]-------------------------
  3103.  
  3104. Problem:  The privileges associated with a subboard should not
  3105. apply to joining other conferences.   Because people in the
  3106. subboard can be SubOps.  Yet current code uses current security
  3107. level to decide what conferences can join, rather than original
  3108. security level.   So people are able to join other conferences
  3109. after joining a subboard, that they could not join upon logon.
  3110.  
  3111. Solution:  Change RBBS-PC.BAS as follows:
  3112.  
  3113. 5335 IF Found THEN _
  3114.         GOSUB 9500 : _
  3115.         ZMainUserFileIndex = -(SubBoard * ZUserFileIndex)_
  3116.                                -((NOT SubBoard) * ZMainUserFileIndex) : _
  3117.         Temp = -(SubBoard * ZMinLogonSec) _
  3118.                -((NOT SubBoard) * AutoAddSec) : _
  3119.         WasI = (ZUserSecLevel < OrigMainSec) : _
  3120.         WasJ = (ZUserSecLevel < Temp) : _
  3121.         WasK = (WasI AND WasJ) : _
  3122.         IF WasK THEN _
  3123.            ZOutTxt$ = "you have been locked out of" : _
  3124.            GOTO 5341 _
  3125.         ELSE GOSUB 5375 : _
  3126.              GOTO 5345
  3127. '
  3128. ' **** USER NOT FOUND.  AUTO-ADD TO SUBBOARD IF SUFFICIENT SECURITY ***
  3129. '
  3130.      ZNewUser = SubBoard
  3131.      IF SubBoard THEN _
  3132.         AutoAddSec = ZMinLogonSec
  3133.      IF (ZOrigSec >= AutoAddSec) AND _                               ' KG080601
  3134.         (ZUserFileIndex > 0) AND (ZMainUserFileIndex > 0) THEN _
  3135.         LSET ZUserRecord$ = UserRecordHold$ : _
  3136.         CALL QuickTPut1 ("MEMBER privileges granted in " + ZConfName$) : _
  3137.         MID$(ZUserOption$,3,2) = MKI$(0) : _
  3138.         MID$(ZUserOption$,1,2) = MKI$(0) : _
  3139.         ZActiveUserName$ = LEFT$(UserRecordHold$,30) : _
  3140.         CALL Trim (ZActiveUserName$) : _
  3141.         Temp = -(SubBoard * ZDefaultSecLevel) _
  3142.                -((NOT SubBoard) * ZUserSecSave) : _
  3143.         GOSUB 5370 : _
  3144.         Temp = -(ZWasA * ZSysopSecLevel) - ((NOT ZWasA) * Temp) : _
  3145.         LSET ZSecLevel$ = MKI$(Temp) : _
  3146.         ZUserSecLevel = Temp : _
  3147.         GOSUB 5375 : _
  3148.         ZPageLength = ZPageLengthDef : _
  3149.         GOSUB 12986 : _
  3150.         GOSUB 12630 : _
  3151.         UpdateDate = ZTrue : _
  3152.         Found = ZTrue : _
  3153.         GOTO 5335
  3154.      IF ZOrigSec >= AutoAddSec THEN _                                ' KG080601
  3155.         CALL QuickTPut1 ("GUEST privileges granted in " + ZConfName$) : _
  3156.         ZActiveUserFile$ = PrevUser$ : _
  3157.         UpdateDate = ZFalse : _
  3158.         ZUserFileIndex = PrevIndex : _
  3159.         GOSUB 5382 : _
  3160.         ZUserFileIndex = 0 : _
  3161.         GOTO 5345
  3162.      ZNewUser = ZFalse
  3163.  
  3164.  
  3165. ------------------------[ KG080501 ]-------------------------
  3166.  
  3167. Problem:  In personal mail scan, some mail from the caller may
  3168. fail to be displayed.   This can occur when the msg base contains
  3169. enough killed messages to exceed the maximum number of messages.
  3170.  
  3171. Solution:  Change RBBS-PC.BAS as follows:
  3172.  
  3173. 1940 MsgsFromUser = MsgsFromUser + 1                                 ' KG080501
  3174.      WasA1$ = WasA1$ + LEFT$(ZMsgRec$,5)                             ' KG080501
  3175.  
  3176. ------------------------[ KG080401 ]-------------------------
  3177.  
  3178. Problem:  Library section not correctly informing caller of
  3179. the extension of the file prepared for downloading when the
  3180. extension created is not the default extension (e.g. default
  3181. is ZIP but using ARCA to compress).   Should now match based
  3182. on program used to do archiving.  Also, a string shortened.
  3183.  
  3184. Solution:  Problems were caused by not using right variables.
  3185. Change RBBSSUB3.BAS as follows:
  3186.  
  3187. 21110 IF ZLibDiskChar$ = "0000" THEN _
  3188.          ZOutTxt$ = "No Library disk currently selected" _
  3189.       ELSE ZOutTxt$ = "Library disk " + _
  3190.                 ZLibDiskChar$ + _
  3191.                 " selected - " + _
  3192.                 DiskTitle$
  3193.       CALL QuickTPut1 (ZOutTxt$)
  3194.       IF LibDiskArc$ = "" THEN _
  3195.          EXIT SUB
  3196.       IF INSTR(ZLibArcProgram$,"ARC") THEN _                         ' KG080401
  3197.          Extension$ = "ARC" _
  3198.       ELSE IF INSTR(ZLibArcProgram$,"ZIP") THEN _                    ' KG080401
  3199.          Extension$ = "ZIP" _
  3200.       ELSE IF INSTR(ZLibArcProgram$,"LHA") THEN _                    ' KG080401
  3201.          Extension$ = "LHZ" _
  3202.       ELSE Extension$ = ZDefaultExtension$
  3203.       FOR LibDisplayCount = 0 TO LibLoopCount - 1
  3204.          IF LibSubdirName$(LibDisplayCount) <> "" THEN _
  3205.             CALL QuickTPut1 (LibSubdirName$(LibDisplayCount) + _
  3206.                        "." + Extension$ + " ready for transmission!")
  3207.       NEXT
  3208.       EXIT SUB
  3209.  
  3210. 21130 IF ZLibType <> 1 THEN _
  3211.          EXIT SUB
  3212.       CALL SkipLine(1)
  3213.       ZOutTxt$ = "The PC-SIG Library file that you are about to"     ' KG080401
  3214.       CALL QuickTPut1 (ZOutTxt$)
  3215.       ZOutTxt$ = "download can also be ordered as DISK " + _
  3216.            ZLibDiskChar$
  3217.       CALL QuickTPut1 (ZOutTxt$)
  3218.       ZOutTxt$ = "from PC-SIG, 1030D East Duane Ave. Sunnyvale, Ca. 94086"
  3219.       CALL QuickTPut (ZOutTxt$,2)
  3220.       EXIT SUB
  3221.  
  3222. 21153 CALL OpenWork (2,Treedir$)
  3223.       LibSubdirCount = 0
  3224.       WHILE NOT EOF(2)
  3225.          LINE INPUT #2, Dirrec$
  3226.          IF LEFT$(Dirrec$,1) <> "." THEN _
  3227.             LibSubdirCount = LibSubdirCount + 1 : _
  3228.             LibSubdirName$(LibSubdirCount) = _
  3229.             LEFT$(Dirrec$,8)
  3230.       WEND
  3231.       CLOSE 2
  3232.       LibLoopCount = 1
  3233.       IF LibSubdirCount = 0 THEN _
  3234.          GOTO 21156
  3235.       ZOutTxt$ = STR$(LibSubdirCount) + _
  3236.            " Subdirectories on Library disk - " + _
  3237.            ZLibDiskChar$
  3238.       CALL QuickTPut1 (ZOutTxt$)
  3239.       FOR LibLoopCount = 1 TO LibSubdirCount
  3240.          IF NOT ZLocalUser THEN _
  3241.             CALL Carrier : _
  3242.             IF ZSubParm THEN _
  3243.                GOTO 21155
  3244.          LibSubdirChar$ = MID$("ABCDEFGHI",LibLoopCount,1)
  3245.          ZOutTxt$ = "Creating " + _
  3246.               ZLibNodeID$ + _
  3247.               "DK" + _
  3248.               ZLibDiskChar$ + _
  3249.               LibSubdirChar$ + "." + Extension$ + _                  ' KG080401
  3250.               " using " + ZLibArcProgram$
  3251.          CALL QuickTPut1 (ZOutTxt$)
  3252.          CHDIR ChdirLib$ + _
  3253.                "\" + _
  3254.                LibSubdirName$(LibLoopCount)
  3255.          GOSUB 21157
  3256.          ZOutTxt$ = "Disk - " + _
  3257.               ZLibDiskChar$ + _
  3258.               "; Subdirectory" + _
  3259.               " -" + _
  3260.               STR$(LibLoopCount) + _
  3261.               " archived for download"
  3262.          CALL QuickTPut1 (ZOutTxt$)
  3263.          GOSUB 21158
  3264.  
  3265. ------------------------[ KG080301 ]-------------------------
  3266.  
  3267. Problem:  In config, the variable NONE.PICKED$ should be used
  3268. everywhere for display when an option allows none to be picked.
  3269.  
  3270. Change CONFIG.BAS as follows:
  3271.  
  3272. 26080 CALL GETINIT ("Select network mail type (0 to 5, CR to end)",24,0,5,AB,CR)
  3273.       NET.MAIL$ = NONE.PICKED$                                       ' KG080301
  3274.       IF AB = 1 THEN _
  3275.          NET.MAIL$ = "SeaDog"
  3276.       IF AB = 2 THEN _
  3277.          NET.MAIL$ = "BINKLEY TERM"
  3278.       RETURN
  3279.  
  3280. Change CNFG-SUB.BAS as follows:
  3281.  
  3282. 12360 DISPLAYED.PAGE.NUMBER = 1
  3283.       GOSUB 24800
  3284.       LOCATE  3,1
  3285.       PRINT " 1. SYSOP's Public First Name -------------------- " + SYSOP.FIRST.NAME$
  3286.       PRINT " 2. SYSOP's Public Last Name --------------------- " + SYSOP.LAST.NAME$
  3287.       PRINT " 3. SYSOP's default expert mode at signon -------- " + EXPERT.USER$
  3288.       PRINT " 4. SYSOP's office hours -------------------------"STR$(START.OFFICE.HOURS);" to"STR$(END.OFFICE.HOURS)
  3289.       PRINT " 5. Page SYSOP using printer's bell -------------- " + M11$
  3290.       PRINT " 6. Go off-line whenever a DISK FULL occurs ------ " ; FNYESNO$(DISKFULL.GO.OFFLINE)
  3291.       PRINT " 7. Prompt bell default is ----------------------- " + PROMPT.BELL$
  3292.       PRINT " 8. Maximum time per session (in minutes) --------"STR$(MINUTES.PER.SESSION!)
  3293.       PRINT " 9. Maximum minutes per day ----------------------";STR$(MAX.PER.DAY)
  3294.       PRINT "10. Factor to extend session time for uploads ----" + STR$(UPLOAD.TIME.FACTOR!)
  3295.       PRINT "11. # Months of inactivity before user deleted ---"STR$(ACT.MNTHS.B4.DELETING)
  3296.       PRINT "12. Name of RBBS-PC shown initially is ----------- " + RBBS.NAME$
  3297.       PRINT "13. Foreground color (for color monitors) is -----"STR$(FG)
  3298.       PRINT "14. Background color (for color monitors) is -----"STR$(BG)
  3299.       PRINT "15. The border color (for color monitors) is -----"STR$(BORDER)
  3300.       PRINT "16. Your CONFIG.SYS contains 'DEVICE=ANSI.SYS'---- " + FNYESNO$(DOSANSI)
  3301.       IF SMART.TEXT THEN _
  3302.          SMART.TEXT$ = STR$(SMART.TEXT) _
  3303.       ELSE SMART.TEXT$ = NONE.PICKED$                                ' KG080301
  3304.       PRINT "17. Control character for SMART TEXT -------------" + SMART.TEXT$
  3305.       PRINT "18. File with automatic operator page parameters - " ; AUTOPAGE.DEF$
  3306.       X = INSTR("ANS",LOGON.MAIL.LEVEL$)
  3307.       IF X < 1 THEN _
  3308.          X = 1
  3309.       X$ = MID$("OLD & NEWNEW ONLY NONE",9*X-8,9)
  3310.       IF X$ = "NONE" THEN _
  3311.          X$ = NONE.PICKED$
  3312.       PRINT "19. Personal mail notification level at logon is - " + X$
  3313.       GOTO 12580
  3314.  
  3315. 12470 DISPLAYED.PAGE.NUMBER = 9
  3316.       GOSUB 30040
  3317.       ' MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  3318.       MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
  3319.       MAX.ALLOWED.MSGS.FRM.DEF  = MAXIMUM.NUMBER.OF.MSGS
  3320.       GOSUB 24800
  3321.       LOCATE  3,1
  3322.       PRINT "161. Maximum number of concurrent RBBS-PC's  -------" + STR$(MAXIMUM.NUMBER.OF.NODES)
  3323.       MT$ = "single RBBS-PC copy "
  3324.       IF MAXIMUM.NUMBER.OF.NODES <> 1 THEN _
  3325.          MT$ = "concurrent RBBS-PC's" : _
  3326.          SUBROUTINE.PARAMETER = 2 : _
  3327.          IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 7 THEN _
  3328.             SUBROUTINE.PARAMETER = 1 : _
  3329.             CALL NETTYPE : _
  3330.          ELSE CALL NETTYPE
  3331.       IF NETWORK.TYPE = 6 THEN _
  3332.          MT$ = "NETBIOS             "
  3333.       IF NETWORK.TYPE = 7 THEN _
  3334.          MT$ = "DoubleDOS           "
  3335.       PRINT "162. Environment running " + MT$ + " ------ " + NETWORK.TYPE$
  3336.       PRINT "163. RBBS-PC 'recycle' method when users log off --- " + RECYCLE.TO.DOS$
  3337.       FILE$ = MAIN.MESSAGE.FILE$
  3338.       GOSUB 30180
  3339.       MAX.MSG.FILE.SIZE.FRM.DEF! = UG
  3340.       IF CONFERENCE.MODE <> 1 THEN _                                 ' KG062302
  3341.          X$ = "MAIN" _                                               ' KG062302
  3342.       ELSE X$ = ZConfName$                                           ' KG062302
  3343.       PRINT "164. Number of records in " ;X$;" User File ";STRING$(15-LEN(X$),"-");STR$(MAX.USR.FILE.SIZE.FRM.DEF) ' KG062302
  3344.       IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _                        ' KG062302
  3345.          X$ = "MAIN" _                                               ' KG062302
  3346.       ELSE X$ = ZConfName$                                           ' KG062302
  3347.       PRINT "165. Number of records in " ;X$;" Message File ";STRING$(12-LEN(X$),"-");STR$(MAX.MSG.FILE.SIZE.FRM.DEF!) ' KG062302
  3348.       PRINT "166. Maximum number of messages allowed ------------" ; STR$(MAX.ALLOWED.MSGS.FRM.DEF) ' KG062302
  3349.       PRINT "167. Conference File Maintenance."
  3350.       IF DEFAULT.EXTENSION$ = "" THEN _                              ' KG080101
  3351.          X$ = NONE.PICKED$ _                                         ' KG080301
  3352.       ELSE X$ = DEFAULT.EXTENSION$                                   ' KG080101
  3353.       PRINT "168. Default extension for compressed files -------- " ; X$ ' KG080101
  3354.       PRINT "169. Additional extensions for compressed files ---- " ; COMPRESSED.EXT$
  3355.       PRINT "170. Message file GROWS in size as messages added -- " ; FNYESNO$(MESSAGES.CAN.GROW)
  3356.       GOTO 12580
  3357.  
  3358. 12510 DISPLAYED.PAGE.NUMBER = 14
  3359.       GOSUB 24800
  3360.       LOCATE 3,1                                                     ' KG080301
  3361.       IF TIME.TO.DROP.TO.DOS < 1 THEN _                              ' KG080301
  3362.          TIME.TO.DROP.TO.DOS$ = NONE.PICKED$ _                       ' KG080301
  3363.       ELSE TIME.TO.DROP.TO.DOS$ = STRING$(4 - (LEN(STR$(TIME.TO.DROP.TO.DOS)) - 1),"0") + MID$(STR$(TIME.TO.DROP.TO.DOS),2) ' KG080301
  3364.  
  3365. ------------------------[ KG080101 ]-------------------------
  3366.  
  3367. Problem:  Extension for compressed files is added to an upload
  3368. when no extension is specified.   However, if dealing mainly
  3369. with text files, this is wrong and confusing.
  3370.  
  3371. Solution:  let default extension be empty.
  3372.  
  3373. Change CONFIG.BAS as follows:
  3374.  
  3375. 14845 CALL ASKRO ("Extension for compressed files",24,HJ$)
  3376.       IF LEN(HJ$) > 3 THEN _                                         ' KG080101
  3377.          GOTO 14845
  3378.       CALL ALLCAPS (HJ$)
  3379.       DEFAULT.EXTENSION$ = HJ$
  3380.       RETURN
  3381.  
  3382. Change CNFG-SUB.BAS as follows:
  3383.  
  3384. 12470 DISPLAYED.PAGE.NUMBER = 9
  3385.       GOSUB 30040
  3386.       ' MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  3387.       MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
  3388.       MAX.ALLOWED.MSGS.FRM.DEF  = MAXIMUM.NUMBER.OF.MSGS
  3389.       GOSUB 24800
  3390.       LOCATE  3,1
  3391.       PRINT "161. Maximum number of concurrent RBBS-PC's  -------" + STR$(MAXIMUM.NUMBER.OF.NODES)
  3392.       MT$ = "single RBBS-PC copy "
  3393.       IF MAXIMUM.NUMBER.OF.NODES <> 1 THEN _
  3394.          MT$ = "concurrent RBBS-PC's" : _
  3395.          SUBROUTINE.PARAMETER = 2 : _
  3396.          IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 7 THEN _
  3397.             SUBROUTINE.PARAMETER = 1 : _
  3398.             CALL NETTYPE : _
  3399.          ELSE CALL NETTYPE
  3400.       IF NETWORK.TYPE = 6 THEN _
  3401.          MT$ = "NETBIOS             "
  3402.       IF NETWORK.TYPE = 7 THEN _
  3403.          MT$ = "DoubleDOS           "
  3404.       PRINT "162. Environment running " + MT$ + " ------ " + NETWORK.TYPE$
  3405.       PRINT "163. RBBS-PC 'recycle' method when users log off --- " + RECYCLE.TO.DOS$
  3406.       FILE$ = MAIN.MESSAGE.FILE$
  3407.       GOSUB 30180
  3408.       MAX.MSG.FILE.SIZE.FRM.DEF! = UG
  3409.       IF CONFERENCE.MODE <> 1 THEN _                                 ' KG062302
  3410.          X$ = "MAIN" _                                               ' KG062302
  3411.       ELSE X$ = ZConfName$                                           ' KG062302
  3412.       PRINT "164. Number of records in " ;X$;" User File ";STRING$(15-LEN(X$),"-");STR$(MAX.USR.FILE.SIZE.FRM.DEF) ' KG062302
  3413.       IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _                        ' KG062302
  3414.          X$ = "MAIN" _                                               ' KG062302
  3415.       ELSE X$ = ZConfName$                                           ' KG062302
  3416.       PRINT "165. Number of records in " ;X$;" Message File ";STRING$(12-LEN(X$),"-");STR$(MAX.MSG.FILE.SIZE.FRM.DEF!) ' KG062302
  3417.       PRINT "166. Maximum number of messages allowed ------------" ; STR$(MAX.ALLOWED.MSGS.FRM.DEF) ' KG062302
  3418.       PRINT "167. Conference File Maintenance."
  3419.       IF DEFAULT.EXTENSION$ = "" THEN _                              ' KG080101
  3420.          X$ = "<none>" _                                             ' KG080101
  3421.       ELSE X$ = DEFAULT.EXTENSION$                                   ' KG080101
  3422.       PRINT "168. Default extension for compressed files -------- " ; X$ ' KG080101
  3423.       PRINT "169. Additional extensions for compressed files ---- " ; COMPRESSED.EXT$
  3424.       PRINT "170. Message file GROWS in size as messages added -- " ; FNYESNO$(MESSAGES.CAN.GROW)
  3425.       GOTO 12580
  3426.  
  3427. Change RBBSSUB2.BAS as follows:
  3428.  
  3429. 20141 IF ZAnsIndex >= ZLastIndex THEN _
  3430.          IF LEN(ZDefaultExtension$) > 0 THEN _                       ' KG080101
  3431.             CALL QuickTPut1 ("Default extension is "+ZDefaultExtension$) ' KG080101
  3432.       ZOutTxt$ = "What compressed file(s)" + ZPressEnterExpert$
  3433.       CALL PopCmdStack
  3434.       IF ZSubParm = -1 OR ZWasQ = 0 THEN _
  3435.          EXIT SUB
  3436.  
  3437. ------------------------[ DA080101 ]-------------------------
  3438.  
  3439. Problem:  When session time shortened to 0 for external event, caller
  3440. has no idea that getting logged off for no time remaining.
  3441.  
  3442. Solution:  Change RBBSSUB3.BAS as follows:
  3443.  
  3444. (line 41010)
  3445.  
  3446.       SUB TimeRemain (MinsRemaining) STATIC
  3447.       TOA! = FRE("A")
  3448.       IF ZBypassTimeCheck THEN _
  3449.          MinsRemaining = ZSecsPerSession! / 60 : _
  3450.          EXIT SUB
  3451.       CALL CheckTime (ZUserLogonTime!, ZSecsUsedSession!, 2)
  3452.       IF ZTimeToDropToDos! = 0 OR _
  3453.          ZOldDate$ = DATE$ THEN _
  3454.          GOTO 41020
  3455.       CALL CheckTime (ZTimeToDropToDos!, HowMuchTimeLeft!, 1)
  3456.       IF (ZSecsPerSession! - ZSecsUsedSession!) > HowMuchTimeLeft! THEN _ ' DA080101
  3457.          ZSecsPerSession! = HowMuchTimeLeft! + ZSecsUsedSession! : _ ' DA080101
  3458.          IF NOT ToldShort THEN _
  3459.             ToldShort = ZTrue : _
  3460.             ZOutTxt$ = "Shortened session time to" + _               ' DA080101
  3461.                 STR$(INT((ZSecsPerSession! - ZSecsUsedSession!) / 60)) + _ ' DA080101
  3462.                 " min for scheduled event" : _                       ' DA080101
  3463.             CALL RingCaller
  3464.  
  3465. ------------------------[ KG073104 ]-------------------------
  3466.  
  3467. Problem: (fix to a fix)  When do a "v c" after a join inside a
  3468. view, conferences would endless display.
  3469.  
  3470. Solution:  Change RBBSSUB4.BAS as follows:
  3471.  
  3472. 59852 IF NOT ZOK THEN _
  3473.          GOTO 59854 _                                                ' KG072101
  3474.       ELSE IF EOF(2) THEN _                                          ' KG072101
  3475.               IF LogicalEOF$ = "" OR SkipParms = 0 THEN _            ' KG073104
  3476.                  GOTO 59854 _                                        ' KG072101
  3477.               ELSE CALL FindIt (ZConfMailList$) : _                  ' KG072101
  3478.                    SkipParms = 0 : _                                 ' KG072901
  3479.                    GOTO 59852                                        ' KG072101
  3480.          CALL ReadAny
  3481.          ZActiveUserFile$ = ZOutTxt$
  3482.          CALL ReadAny
  3483.          IF ZErrCode > 0 THEN _
  3484.             GOTO 59854
  3485.          ZActiveMessageFile$ = ZOutTxt$                              ' KG072901
  3486.          CALL FindFile (ZActiveUserFile$,ZOK)
  3487.          IF NOT ZOK THEN _
  3488.             GOTO 59854
  3489.          CALL OpenUser (HighestUserRecord)
  3490.          FIELD 5, 128 AS ZUserRecord$
  3491.          CALL FindFile (ZActiveMessageFile$,ZOK)
  3492.          IF NOT ZOK THEN _
  3493.             GOTO 59854
  3494.          CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
  3495.                         0,0,HighestUserRecord,_
  3496.                         Found,HoldUserFileIndex,ZWasSL)
  3497.          IF NOT Found THEN _
  3498.             GOTO 59852
  3499.          CALL OpenMsg
  3500.          FIELD 1, 128 AS ZMsgRec$
  3501.          GET 1,1
  3502.          AnyMail = ZTrue
  3503.          WasX = CVI(MID$(ZUserRecord$,57,2))
  3504.          WasX = (WasX AND 512) > 0
  3505.          CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
  3506.          InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
  3507.          IF InCur THEN _
  3508.             WasX = ZMailWaiting : _                                  ' KG030101
  3509.             ZWasA = ZLastMsgRead _
  3510.          ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
  3511.          ZWasB = VAL(LEFT$(ZMsgRec$,8))
  3512.          WasZ = (ZWasB - ZWasA)
  3513.          IF WasZ < 0 THEN _
  3514.             ZWasA = 0 : _
  3515.             WasZ = ZWasB _
  3516.          ELSE IF WasZ = 0 THEN _
  3517.                  WasX = ZFalse
  3518.          ZOutTxt$ = MID$(STR$((ZWasB > ZWasA) * WasZ),2)
  3519.          ZWasSL = LEN(ZOutTxt$)
  3520.          ZOutTxt$ = SPACE$(-(ZWasSL<4) * (4-ZWasSL)) + ZOutTxt$
  3521.          ZWasSL = LEN(CurPre$)
  3522.          IF CurPre$ = "USERS" AND CurExt$ = "" THEN _
  3523.             Conf$ = "MAIN" _
  3524.          ELSE Conf$ = LEFT$(CurPre$,ZWasSL-1)
  3525.          ZWasY$ = Conf$ + SPACE$(-(ZWasSL<8) * (8-ZWasSL))
  3526.          IF WasX THEN _
  3527.             WasX$ = ZEmphasizeOn$ : _
  3528.             ZWasZ$ = ZEmphasizeOff$ _
  3529.          ELSE WasX$ = "" : _
  3530.               ZWasZ$ = ""
  3531.          ZOutTxt$ = ZWasY$ + ": " + ZOutTxt$ + " new message(s): " + _
  3532.               WasX$ + MID$(" None *Some*",-6 * WasX + 1,6) + " to you" + ZWasZ$
  3533.          ZSubParm = 5
  3534.          CALL TPut
  3535.          IF SkipJoinUnjoin THEN _
  3536.             CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) : _
  3537.             GOTO 59853
  3538.          SkipParms = SkipParms + 2                                   ' KG072101
  3539.          ZTurboKey = -ZTurboKeyUser
  3540.          CALL AskMore (",J)oin,U)njoin",ZTrue,ZFalse,WasX,ZFalse)
  3541.          IF ZNo THEN _
  3542.             GOTO 59854
  3543.          WasX$ = LEFT$(ZUserIn$(1),1)
  3544.          CALL AllCaps (WasX$)
  3545.          IF WasX$ = "J" THEN _
  3546.             ZHomeConf$ = Conf$ : _
  3547.             GOTO 59854
  3548.          IF WasX$ = "U" THEN _
  3549.             IF InCur OR (OrigPre$ = CurPre$ AND OrigExt$ = CurExt$) THEN _
  3550.                CALL QuickTPut1 ("Can't omit yourself from the board or conference you're in") _
  3551.             ELSE LSET ZUserRecord$ = CHR$(0) + "deleted user" : _
  3552.                  ZUserFileIndex = HoldUserFileIndex : _
  3553.                  ZSubParm = 6 : _
  3554.                  CALL FileLock : _
  3555.                  PUT 5, HoldUserFileIndex : _
  3556.                  ZSubParm = 8 : _
  3557.                  CALL FileLock : _
  3558.                  CALL QuickTPut1 ("Omitted you from " + Conf$)       ' KG073104
  3559. 59853 IF ZActiveMessageFile$ = LogicalEOF$ THEN _                    ' KG073104
  3560.          GOTO 59854                                                  ' KG073104
  3561.       IF NOT ZRet THEN _                                             ' KG073104
  3562.          GOTO 59852
  3563.          IF ZActiveMessageFile$ = LogicalEOF$ THEN _                 ' KG072901
  3564.             GOTO 59854                                               ' KG072901
  3565.  
  3566. ------------------------[ KG073103 ]-------------------------
  3567.  
  3568. Problem:  When people hand edit the config def file, they can get a
  3569. value for color that generates an error and never lets the SysOp into
  3570. config.
  3571.  
  3572. Solution:  Change CONFIG.BAS as follows:
  3573.  
  3574. 22340 LOCATE 22,1
  3575.       PRINT SPACE$(15) + _
  3576.             TIME$ + _
  3577.             " " + _
  3578.             SPACE$(64);
  3579.       LOCATE 22,35
  3580.       COLOR 0,7
  3581.       PRINT " Reading Data, Wait a sec !!! ";
  3582.       COLOR FG,BG,BORDER                                             ' KG073103
  3583. 22342 RETURN                                                         ' KG073103
  3584.  
  3585. 60010 '* HANDLE ERROR CONDITIONS *
  3586.       IF ERR = 62 AND _
  3587.         (ERL = 11600 OR _
  3588.          ERL = 11620 OR _
  3589.          ERL = 11640 OR _
  3590.          ERL = 11660 OR _
  3591.          ERL = 11680 OR _
  3592.          ERL = 11700 OR _
  3593.          ERL = 11705 OR _
  3594.          ERL = 11706) THEN _
  3595.          PRINT CONFIG.FILENAME$ + _
  3596.                " from a version earlier than " + CONFIG.VERSION$ + " on default drive." : _
  3597.          PRINT "Please delete and rerun CONFIG." : _
  3598.          RESUME 60340
  3599.       IF ERL = 15780 AND ERR = 5 AND _
  3600.          INSTR(USER.INIT.COMMAND$,"S0=") = 0 THEN _
  3601.          RESUME 16073
  3602.       IF ERL = 22340 THEN _                                          ' KG073103
  3603.          RESUME 22342                                                ' KG073103
  3604.       IF ERL = 31000 AND ERR = 58 THEN _
  3605.          KILL A$ : _
  3606.          RESUME 31000
  3607.       IF ERL = 31030 AND ERR = 58 THEN _
  3608.          KILL A$ : _
  3609.          RESUME 31030
  3610.       IF ERL = 22120 AND ERR = 6 THEN _
  3611.          RESUME 22100
  3612.       IF ERL = 24750 AND ERR = 58 THEN _
  3613.          KILL A$ : _
  3614.          RESUME 24750
  3615.       IF ERL = 31020 THEN _
  3616.          PRINT "Unable to kill ";MAIN.MESSAGE.FILE$;".  Error";STR$(ERR):_
  3617.          RESUME 31035
  3618.       IF ERL = 50490 AND ERR = 58 THEN  _
  3619.          RESUME 50500
  3620.       IF ERL = 50540 AND ERR = 58 THEN  _
  3621.          RESUME 50550
  3622.       IF ERL = 50490 OR ERL = 50540 THEN _
  3623.          RESUME 15230
  3624.       IF ERL = 60471 THEN _
  3625.          IF ERR <> 76 THEN _
  3626.             RESUME 60478 _
  3627.          ELSE RESUME 60474
  3628.       IF ERL = 60480 THEN _
  3629.          PRINT "ERROR -";ERR;" UNABLE TO CREATE SUBDIRECTORY" : _
  3630.          RESUME 60478
  3631.       IF ERR = 61 THEN _
  3632.          PRINT "ERROR - IBM DOS DISKETTE FULL " : _
  3633.          RESUME 60340
  3634.       IF ERR = 67 THEN _
  3635.          PRINT "ERROR - IBM DOS DIRECTORY FULL" : _
  3636.          RESUME 60340
  3637.       IF ERR = 70 THEN _
  3638.          PRINT "DISKETTE IN DRIVE IS WRITE PROTECTED" : _
  3639.          RESUME 60340
  3640.       IF ERR = 71 THEN _
  3641.          PRINT "DRIVE DOOR OPEN OR MISSING DISKETTE"  : _
  3642.          RESUME 60340
  3643.       IF ERR = 72 THEN _
  3644.          PRINT "ERROR - UNFORMATTED IBM DOS DISKETTE IN DRIVE" : _
  3645.          RESUME 60340
  3646.       PRINT "+++ Error";ERR;" in line ";ERL "occurred at " TIME$ " on " DATE$
  3647.  
  3648. ------------------------[ KG073102 ]-------------------------
  3649.  
  3650. Problem:  When stack a "C" in a msg read command, interpretes
  3651. as "continuous" but also treats as if it were a string to search
  3652. for.
  3653.  
  3654. Solution:  Change RBBS-PC.BAS as follows:
  3655.  
  3656. 4371 IF MsgIndex <= NumMsgsSelected THEN _                           ' KG022701
  3657.         IF LEN(ZUserIn$(MsgIndex)) = 1 AND _                         ' KG073102
  3658.            INSTR("Cc",ZUserIn$(MsgIndex)) > 0 THEN _                 ' KG022701
  3659.            GOTO 4370 _
  3660.         ELSE _
  3661.         CALL CheckInt (ZUserIn$(MsgIndex)) : _                       ' KG022701
  3662.         IF ZErrCode <> 0 THEN _
  3663.            ZWasEL = 4371 : _
  3664.            GOTO 13000 _
  3665.         ELSE CurMsg = ZTestedIntValue : _
  3666.              ZAnsIndex = MsgIndex : _                                ' KG022701
  3667.              GOTO 4415
  3668.  
  3669. ------------------------[ KG073101 ]-------------------------
  3670.  
  3671. Problem:  SysOp can put in a user with a blank password so that
  3672. user can set password 1st time calls.  Or might add this way to
  3673. a private subboard.   However, users with blank passwords will be
  3674. not be displayed in the user list, not even to SysOp.
  3675.  
  3676. Solution:  Change RBBS-PC.BAS as follows:
  3677.  
  3678. 10097 IF WasI > HighestUserRecord OR ZRet THEN _
  3679.          GOTO 10099
  3680.       GET 5,WasI
  3681.       WasX$ = MID$(ZUserRecord$,ZStartHash,ZLenHash)
  3682.       IF ASC(WasX$)=0 OR LEFT$(WasX$,3)="   " THEN _                 ' KG073101
  3683.          GOTO 10098
  3684.       IF INSTR(WasX$,ZWasZ$) > 0 OR ZSysopSecLevel <= CVI(MID$(ZUserRecord$,47,2)) THEN _
  3685.          IF NOT ZSysop THEN _
  3686.             GOTO 10098
  3687.       CALL AskMore ("",ZTrue,ZTrue,WasXX,ZFalse)
  3688.       IF ZNo OR ZSubParm = -1 THEN _
  3689.          GOTO 10099
  3690.       ZOutTxt$ = LEFT$(WasX$,36) + ZCityState$ + ZLastDateTimeOn$
  3691.       GOSUB 12979
  3692.  
  3693. ------------------------[ KG073001 ]-------------------------
  3694.  
  3695. Problem:  When do an autologoff and have insufficent time to download,
  3696. then enter another download with autologoff, logged off immediately.
  3697.  
  3698. Solution:  Cancel any autologoff when any file not downloaded because
  3699. of insufficent time.   Change RBBSSUB5.BAS as follows:
  3700.  
  3701. 20760 IF ZErrCode <> 0 THEN _
  3702.          CALL QuickTPut1 ("Unable to access "+ZFileNameHold$) : _
  3703.          CALL UpdtCalr ("Unable to access "+ZFileName$,2) : _
  3704.          ZOK = ZFalse : _
  3705.          ZErrCode = 0 : _
  3706.          ZBytesInFile# = 0 : _
  3707.          RETURN
  3708.       ZBytesInFile# = LOF(2)
  3709.       ZNumDnldBytes! = LOF(2)
  3710.       ZOK = ZTrue
  3711.       IF SizeOnly THEN _
  3712.          SizeOnly = ZFalse : _
  3713.          RETURN
  3714.       ZBlocksInFile# = MaxBlock
  3715.       IF ZBatchTransfer THEN _
  3716.          Temp# = BatchBlocks# + ZBlocksInFile# : _
  3717.          CALL CheckTimeRemain (MinsRemaining) : _
  3718.          IF (NOT PersonalDnld) AND _
  3719.             (INT(Temp# / 60) + 1 > MinsRemaining) THEN _
  3720.             CALL QuickTPut1 ("Omitting " + ZFileNameHold$ + ".  Insufficient time") : _
  3721.             ZAutoLogoffReq = ZFalse : _                              ' KG073001
  3722.             RETURN _
  3723.          ELSE BatchBlocks# = Temp# : _
  3724.               BatchBytes# = BatchBytes# + ZBytesInFile# : _
  3725.               CALL OpenWorkA (ZNodeWorkFile$) : _
  3726.               CALL PrintWorkA (ZFileName$) : _
  3727.               ZDownFiles = ZDownFiles + 1 : _
  3728.               RETURN
  3729.       ZDownFiles = 1
  3730.  
  3731. ------------------------[ MB073001 ]-------------------------
  3732.  
  3733. Problem:  On logon, if start name with leading spaces, will not
  3734. hide the password.
  3735.  
  3736. Solution:  Change RBBSSUB2.BAS as follows:
  3737.  
  3738. 1550 IF ZLogonActive THEN _
  3739.         IF (ZWasY$ = " " OR ZWasY$ = ";") AND LEN(ZUserIn$) > 0 AND _ ' MB073001
  3740.            RIGHT$(ZUserIn$,1) <> " " AND RIGHT$(ZUserIn$,1) <> ";" THEN _
  3741.               Parm = Parm + 1 : _
  3742.               ZLogonActive = (Parm < 3) : _
  3743.               ZHidden = (Parm = 2) : _
  3744.               CALL LPrnt(WasX$,0) : _
  3745.               GOTO 1551
  3746.      IF ZHidden AND (WasX$ <> " ") THEN _
  3747.         WasX$ = "."
  3748.      CALL LPrnt(WasX$,0)
  3749.  
  3750. ------------------------[ KG072902 ]-------------------------
  3751.  
  3752. Problem:  Prompt on number of seconds to delay before issuing a
  3753. modem command says can be 0 to 99 but edit only permits 1 to 99.
  3754.  
  3755. Solution:  Change CONFIG.BAS as follows:
  3756.  
  3757. 15250 CALL MMINTEGER ("# seconds to delay prior to issuing modem commands (1 to 99)?",1,99,MODEM.COMMAND.DELAY.TIME) ' KG072902
  3758.       RETURN
  3759.  
  3760. ------------------------[ KG072901 ]-------------------------
  3761.  
  3762. Problem:  (Fix to a fix)  Sometimes a conference is skipped in
  3763. conference V)iew when should not be.
  3764.  
  3765. Solution:  Change RBBSSUB4.BAS as follows:
  3766.  
  3767. 59852 IF NOT ZOK THEN _
  3768.          GOTO 59854 _                                                ' KG072101
  3769.       ELSE IF EOF(2) THEN _                                          ' KG072101
  3770.               IF LogicalEOF$ = "" THEN _                             ' KG072101
  3771.                  GOTO 59854 _                                        ' KG072101
  3772.               ELSE CALL FindIt (ZConfMailList$) : _                  ' KG072101
  3773.                    SkipParms = 0 : _                                 ' KG072901
  3774.                    GOTO 59852                                        ' KG072101
  3775.          CALL ReadAny
  3776.          ZActiveUserFile$ = ZOutTxt$
  3777.          CALL ReadAny
  3778.          IF ZErrCode > 0 THEN _
  3779.             GOTO 59854
  3780.          ZActiveMessageFile$ = ZOutTxt$                              ' KG072901
  3781.          CALL FindFile (ZActiveUserFile$,ZOK)
  3782.          IF NOT ZOK THEN _
  3783.             GOTO 59854
  3784.          CALL OpenUser (HighestUserRecord)
  3785.          FIELD 5, 128 AS ZUserRecord$
  3786.          CALL FindFile (ZActiveMessageFile$,ZOK)
  3787.          IF NOT ZOK THEN _
  3788.             GOTO 59854
  3789.          CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
  3790.                         0,0,HighestUserRecord,_
  3791.                         Found,HoldUserFileIndex,ZWasSL)
  3792.          IF NOT Found THEN _
  3793.             GOTO 59852
  3794.          CALL OpenMsg
  3795.          FIELD 1, 128 AS ZMsgRec$
  3796.          GET 1,1
  3797.          AnyMail = ZTrue
  3798.          WasX = CVI(MID$(ZUserRecord$,57,2))
  3799.          WasX = (WasX AND 512) > 0
  3800.          CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
  3801.          InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
  3802.          IF InCur THEN _
  3803.             WasX = ZMailWaiting : _                                  ' KG030101
  3804.             ZWasA = ZLastMsgRead _
  3805.          ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
  3806.          ZWasB = VAL(LEFT$(ZMsgRec$,8))
  3807.          WasZ = (ZWasB - ZWasA)
  3808.          IF WasZ < 0 THEN _
  3809.             ZWasA = 0 : _
  3810.             WasZ = ZWasB _
  3811.          ELSE IF WasZ = 0 THEN _
  3812.                  WasX = ZFalse
  3813.          ZOutTxt$ = MID$(STR$((ZWasB > ZWasA) * WasZ),2)
  3814.          ZWasSL = LEN(ZOutTxt$)
  3815.          ZOutTxt$ = SPACE$(-(ZWasSL<4) * (4-ZWasSL)) + ZOutTxt$
  3816.          ZWasSL = LEN(CurPre$)
  3817.          IF CurPre$ = "USERS" AND CurExt$ = "" THEN _
  3818.             Conf$ = "MAIN" _
  3819.          ELSE Conf$ = LEFT$(CurPre$,ZWasSL-1)
  3820.          ZWasY$ = Conf$ + SPACE$(-(ZWasSL<8) * (8-ZWasSL))
  3821.          IF WasX THEN _
  3822.             WasX$ = ZEmphasizeOn$ : _
  3823.             ZWasZ$ = ZEmphasizeOff$ _
  3824.          ELSE WasX$ = "" : _
  3825.               ZWasZ$ = ""
  3826.          ZOutTxt$ = ZWasY$ + ": " + ZOutTxt$ + " new message(s): " + _
  3827.               WasX$ + MID$(" None *Some*",-6 * WasX + 1,6) + " to you" + ZWasZ$
  3828.          ZSubParm = 5
  3829.          CALL TPut
  3830.          IF SkipJoinUnjoin THEN _
  3831.             CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) : _
  3832.             GOTO 59853
  3833.          SkipParms = SkipParms + 2                                   ' KG072101
  3834.          ZTurboKey = -ZTurboKeyUser
  3835.          CALL AskMore (",J)oin,U)njoin",ZTrue,ZFalse,WasX,ZFalse)
  3836.          IF ZNo THEN _
  3837.             GOTO 59854
  3838.          WasX$ = LEFT$(ZUserIn$(1),1)
  3839.          CALL AllCaps (WasX$)
  3840.          IF WasX$ = "J" THEN _
  3841.             ZHomeConf$ = Conf$ : _
  3842.             GOTO 59854
  3843.          IF WasX$ = "U" THEN _
  3844.             IF InCur OR (OrigPre$ = CurPre$ AND OrigExt$ = CurExt$) THEN _
  3845.                CALL QuickTPut1 ("Can't omit yourself from the board or conference you're in") _
  3846.             ELSE LSET ZUserRecord$ = CHR$(0) + "deleted user" : _
  3847.                  ZUserFileIndex = HoldUserFileIndex : _
  3848.                  ZSubParm = 6 : _
  3849.                  CALL FileLock : _
  3850.                  PUT 5, HoldUserFileIndex : _
  3851.                  ZSubParm = 8 : _
  3852.                  CALL FileLock : _
  3853.                  CALL QuickTPut1 ("Omitted you from " + Conf$)
  3854.          IF ZActiveMessageFile$ = LogicalEOF$ THEN _                 ' KG072901
  3855.             GOTO 59854                                               ' KG072901
  3856.  
  3857. ------------------------[ KG072802 ]-------------------------
  3858.  
  3859. Problem:  Possible to improperly read thru messages when
  3860. renumbering in CONFIG.
  3861.  
  3862. Solution:  Change CONFIG.BAS as follows:
  3863.  
  3864. 23610 I = LOC(1) + VAL(MID$(MESSAGE.RECORD$,117,4)) - 1              ' KG072802
  3865.       RETURN
  3866.  
  3867. ------------------------[ KG072801 ]-------------------------
  3868.  
  3869. Problem:  When renumber messages using config.exe, it resets
  3870. last message read for all users to 0 rather than to the
  3871. new message number.
  3872.  
  3873. Solution:  Change CONFIG.BAS as follows:
  3874.  
  3875. 23750 REDIM MSG.XREF(MAXIMUM.NUMBER.OF.MSGS,2)                       ' KG072801
  3876.       MSG.XREF.INDX = 0                                              ' dd062790
  3877.       B1 = CALLS.TODATE!                                             ' dd062790
  3878.       CALL GETINIT ("Renumber starting with OLD message # (<" + _
  3879.                      STR$(CALLS.TODATE! + 1) + _
  3880.                     ")",24,1,B1,RE,CR)
  3881.       IF CR THEN _
  3882.          RETURN
  3883.  
  3884. 23900 A$ = "Reset last message read for all users"                   ' dd062790
  3885.       GOSUB 22580
  3886.  
  3887. 23905 GOSUB 24020
  3888.       GOSUB 24025
  3889.       A! = HIGHEST.USER.RECORD
  3890.       XX$ = "Resetting Last Msg Read by User.  Processing Record #"  ' dd062790
  3891.       GOSUB 50345
  3892.       FOR J = 1 TO A!
  3893.          GET 1,J
  3894.          LOCATE 24,X
  3895.          PRINT J;
  3896.          HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  3897.          LSET COMP.USER$ = HASH.VALUE$
  3898.          IF ASC(HASH.VALUE$) = 0 OR _
  3899.             COMP.USER$ = NEW.USER$ OR _
  3900.             COMP.USER$ = EMPTY.USER$ THEN _
  3901.               GOTO 23955
  3902.          FORMER.LAST.MSG = CVI(MID$(USER.OPTIONS$,3,2))              ' dd062790
  3903.          MSG.XREF.INDX = 1                                           ' KG072801
  3904. 23906    IF MSG.XREF.INDX > MAXIMUM.NUMBER.OF.MSGS THEN _            ' KG072801
  3905.             GOTO 23907                                               ' KG072801
  3906.             IF FORMER.LAST.MSG = MSG.XREF(MSG.XREF.INDX,1) THEN _    ' dd062790
  3907.                NEW.LAST.MSG = MSG.XREF(MSG.XREF.INDX,2) : _          ' dd062790
  3908.                GOTO 23907                                            ' KG072801
  3909.             IF FORMER.LAST.MSG < MSG.XREF(MSG.XREF.INDX,1) THEN _    ' dd062790
  3910.                NEW.LAST.MSG = MSG.XREF(MSG.XREF.INDX - 1,2) : _      ' dd062790
  3911.                GOTO 23907                                            ' KG072801
  3912.             MSG.XREF.INDX = MSG.XREF.INDX + 1                        ' KG072801
  3913.          GOTO 23906                                                  ' KG072801
  3914. 23907    IF FORMER.LAST.MSG = 0 THEN NEW.LAST.MSG = 0                ' KG072801
  3915.          MID$(USER.OPTIONS$,3,2) = MKI$(NEW.LAST.MSG)                ' dd062790
  3916.          PUT 1,J
  3917.  
  3918. 24010 LOCATE 24,15
  3919.       PRINT "Msg #" ; MID$(MESSAGE.RECORD$,1,5);
  3920.       CURRENT.MSG.NUMBER = VAL(MID$(MESSAGE.RECORD$,2,4))            ' dd062790
  3921.       IF CURRENT.MSG.NUMBER < RE THEN _                              ' dd062790
  3922.          PRINT " read"; : _
  3923.          MSG.XREF.INDX = MSG.XREF.INDX + 1 : _                       ' dd062790
  3924.          MSG.XREF(MSG.XREF.INDX, 1) = CURRENT.MSG.NUMBER : _         ' dd062790
  3925.          MSG.XREF(MSG.XREF.INDX, 2) = CURRENT.MSG.NUMBER : _         ' dd062790
  3926.          RETURN
  3927.       Y$ = MID$(MESSAGE.RECORD$,1,1)
  3928.       MID$(MESSAGE.RECORD$,1,5) = SPACE$(5)
  3929.       NE = NE + 1
  3930.       MID$(MESSAGE.RECORD$,1,5) = STR$(NE)
  3931.       MID$(MESSAGE.RECORD$,1,1) = Y$
  3932.       PRINT " renumbered as Msg #" + MID$(MESSAGE.RECORD$,1,5)
  3933.       PUT 1,I
  3934.       MSG.XREF.INDX = MSG.XREF.INDX + 1                              ' dd062790
  3935.       MSG.XREF(MSG.XREF.INDX, 1) = CURRENT.MSG.NUMBER                ' dd062790
  3936.       MSG.XREF(MSG.XREF.INDX, 2) = NE                                ' dd062790
  3937.       RETURN
  3938.  
  3939. ------------------------[ KG072702 ]-------------------------
  3940.  
  3941. Problem:  When stack uploads and give an extended desciption,
  3942. all uploads thereafter are ignored.
  3943.  
  3944. Solution:  Change RBBSSUB5.BAS as follows:
  3945.  
  3946. 20430 ZAnsIndex = ZLastIndex
  3947.       GOSUB 20470
  3948.       ZLastIndex = ZLastIndex + (WasX > 0)
  3949.       LastUpld = ZLastIndex                                          ' KG072702
  3950. 20432 FOR ZAnsIndex = FirstUpld TO LastUpld                          ' KG072702
  3951.          GOSUB 20470
  3952.          GOSUB 20435
  3953.          FirstUpld = FirstUpld + 1                                   ' KG072702
  3954.          IF ZFileSysParm > 1 THEN _
  3955.             ZAnsIndex = LastUpld + 1                                 ' KG072702
  3956.       NEXT
  3957.       ZCmdTransfer$ = ""
  3958.       RETURN
  3959.  
  3960. 20705 ZMaxMsgLines = ZMaxMsgLinesDef
  3961.       ZRightMargin = WasLL
  3962.       GOSUB 20702                                                    ' KG072702
  3963.       GOTO 20432                                                     ' KG072702
  3964.  
  3965. ------------------------[ KG072701 ]-------------------------
  3966.  
  3967. Strings shortened to reduce size of EXE and free up string space.
  3968.  
  3969. Change RBBSSUB3.BAS as follows:
  3970.  
  3971. 58150 ' $SUBTITLE: 'CountNewFiles - sub to count how many files new'
  3972. ' $PAGE
  3973. '
  3974. '  NAME    -- CountNewFiles
  3975. '
  3976. '  INPUTS  --     PARAMETER           MEANING
  3977. '                  LastOn$          Date of last logon
  3978. '                  UPLDS$            Latest uploads
  3979. '
  3980. '  OUTPUTS --    NumNewFiles       How many after last logon
  3981. '                RptPrefix$         Set to "At least " if
  3982. '                                    above is a minimum
  3983. '
  3984. '  PURPOSE -- Checks how many files in UPLDS$ were uploaded on or
  3985. '             after date of last logon that the user can download
  3986. '
  3987.       SUB CountNewFiles (LastOn$,Upld(2),NumUserFiles,RptPrefix$) STATIC
  3988.       BaseDate = 372 * (VAL(MID$(LastOn$,7,2)) - 80) + _
  3989.                   31 * (VAL(MID$(LastOn$,1,2))) + _
  3990.                   VAL(MID$(LastOn$,4,2))
  3991.       NumNewFiles = 1
  3992.       NumUserFiles = 0
  3993.       WHILE (BaseDate <= Upld(NumNewFiles,1) AND _
  3994.                 Upld(NumNewFiles,1) > 0 AND _
  3995.                 NumNewFiles < UBOUND(Upld,1))
  3996.          IF ZUserSecLevel => Upld(NumNewFiles,2) THEN _
  3997.             NumUserFiles = NumUserFiles + 1
  3998.          NumNewFiles = NumNewFiles + 1
  3999.       WEND
  4000.       IF Upld(NumNewFiles,1) < 1 THEN _
  4001.          NumNewFiles = NumNewFiles - 1
  4002.       IF BaseDate <= Upld(NumNewFiles,1) THEN _
  4003.          RptPrefix$ = "At least" _                                   ' KG072701
  4004.       ELSE RptPrefix$ = ""
  4005.       END SUB
  4006.  
  4007. (line 20705)
  4008.  
  4009.       SUB UpdtUpload (ZCategoryName$(1),ZCategoryCode$(1), LinesInDesc) STATIC
  4010.       IF ZGetExtDesc THEN _
  4011.          GOTO 20723
  4012.       GOSUB 20734
  4013.       CALL TimeRemain (MinsRemaining)
  4014.       IF ZPrivateDoor THEN _
  4015.          WasX! = ZUpldTimeFactor! * ZWasQ! _
  4016.       ELSE WasX! = ZUpldTimeFactor! * (ZSecsUsedSession! - ZWasQ!)
  4017.       CALL BreakFileName (ZFileName$,Pre$,Body$,Ext$,ZFalse)
  4018.       WasX$ = ZDiskForDos$ + "T" + Ext$ + ".BAT"
  4019.       CALL FindIt (WasX$)
  4020.       IF NOT ZOK THEN _
  4021.          GOTO 20708
  4022.       CALL QuickTPut1 ("Testing if file OK...") : _                  ' KG072601
  4023.       CALL ReadDir (2,1)
  4024.       IF EOF(2) THEN _
  4025.          WasX$ = ZOutTxt$ : _
  4026.          ZGSRAra$(1) = ZFileName$ : _
  4027.          ZGSRAra$(2) = ZNodeWorkFile$ _
  4028.       ELSE WasX$ = WasX$ + " " + _
  4029.            ZFileName$ + " " + ZNodeWorkFile$
  4030.       CALL ShellExit (WasX$)
  4031.       CALL FindIt (ZNodeWorkFile$)
  4032.       IF ZOK THEN _
  4033.          IF LOF(2) > 2 THEN _
  4034.             ZBytesInFile# = 0.0 : _
  4035.             WasX$ = "Deleting BAD upload " + ZFileNameHold$ : _
  4036.             CALL QuickTPut1 (WasX$) : _
  4037.             CALL UpdtCalr (WasX$,2) : _
  4038.             CALL KillWork (ZFileName$) : _
  4039.             EXIT SUB
  4040.  
  4041. 20712 ZOK = 0
  4042.       CALL CheckNovell (ZOK)
  4043.       IF ZOK <> -1 THEN _
  4044.          CALL SetSharedAttr (ZFileName$, ZOK) : _
  4045.          IF ZOK <> 0 THEN _
  4046.             CALL PScrn ("Error setting to shared")                   ' KG072701
  4047.       Desc$ = ZUserIn$
  4048.       IF NOT ZLimitSearchToFMS THEN _
  4049.          IF ZFMSDirectory$ <> ZUpldDir$ THEN _
  4050.             IF LEFT$(ZUserIn$,1) = "/" THEN _
  4051.                CALL UpdtCalr (ZUserIn$,2) : _
  4052.                GOTO 20726_
  4053.             ELSE GOTO 20717
  4054.  
  4055. 20726 ZWasDF$ = " >> uploaded << "
  4056.       ZUplds = ZUplds + 1
  4057.       ZGlobalUplds = ZGlobalUplds + 1
  4058.       ZULBytes! = ZULBytes! + ZBytesInFile#
  4059.       ZGlobalULBytes! = ZGlobalULBytes! + ZBytesInFile#
  4060.       CALL Muzak (7)
  4061.       CALL TimeRemain (MinsRemaining)
  4062.       ZTimeCredits! = ZTimeCredits! + WasX!
  4063.       ZSecsPerSession! = ZSecsPerSession! + WasX!
  4064.       IF ZPrivateDoor THEN _
  4065.          WasX! = (WasX! - ZWasQ!) / 60 _
  4066.       ELSE WasX! = (WasX! - ZSecsUsedSession! + ZWasQ!)/60.0
  4067.       WasX$ = STR$(FIX(WasX!*10.0))
  4068.       WasX$ = LEFT$(WasX$,LEN(WasX$)-1) + "." + RIGHT$(WasX$,1)
  4069.       IF WasX! > 1 THEN _
  4070.          CALL QuickTPut1 ("Increased session time by"+WasX$+" minutes") ' KG072701
  4071.       CALL QuickTPut1 ("Thanks for the upload!")
  4072.       ZGetExtDesc = ZFalse
  4073.       EXIT SUB
  4074.  
  4075. Change RBBSSUB5.BAS as follows:
  4076.  
  4077. (line 63320)
  4078.  
  4079.       SUB ShellExit (ShellTem$) STATIC
  4080.       CALL DelayTime (8 + ZBPS)
  4081.       IF NOT ZLocalUser THEN _
  4082.          IF ZFossil THEN _
  4083.             CALL FOSExit(ZComPort) _
  4084.          ELSE CLOSE 3 : _
  4085.               OUT ZModemCntlReg,INP(ZModemCntlReg) OR 1
  4086.       CLOSE 2
  4087.       CALL MetaGSR (ShellTem$,ZFalse)
  4088.       SHELL ShellTem$
  4089.       IF ZFossil THEN _
  4090.          IF NOT ZLocalUser THEN _
  4091.             CALL FOSinit(ZComPort,Result) : _
  4092.             IF Result = -1 THEN _
  4093.                CALL PScrn("ERROR INIT FOSSIL AFT EXTERNAL") : _      ' KG072701
  4094.                SYSTEM
  4095.       CALL DelayTime (2)
  4096.       CALL RestoreCom
  4097.       END SUB
  4098.  
  4099. ------------------------[ KG072606 ]-------------------------
  4100.  
  4101. Problem:  When joining a subboard, RBBS was taking the reference
  4102. date for new files, new bulletins, and news, from the main board
  4103. rather than the last time the subboard had been entered.
  4104.  
  4105. Solution:  Change RBBS-PC.BAS as follows:
  4106.  
  4107. 5348 GOSUB 12987
  4108.      GOSUB 12990
  4109.      IF SubBoard THEN _
  4110.         ZHasDoored = ZFalse : _
  4111.         ZActiveFMSDir$ = "" : _
  4112.         ZTimeLoggedOn$ = TIME$ : _                                   ' KG070601
  4113.         BoardCheckDate$ = ZLastDateTimeOn$ : _                       ' KG072606
  4114.         RETURN 108
  4115.      GOSUB 827
  4116.      IF UpdateDate THEN _
  4117.         BoardCheckDate$ = ZLastDateTimeOn$ : _
  4118.         ZTimeLoggedOn$ = TIME$ : _                                   ' KG070601
  4119.         LSET ZLastDateTimeOn$ = ZCurDate$ + _
  4120.                                   " " + _
  4121.                                   ZTimeLoggedOn$ : _
  4122.         GOSUB 9440 : _
  4123.         GOSUB 12991
  4124.      IF PrevUSL <> ZUserSecLevel THEN _
  4125.         CALL SetPrompt
  4126.      GOSUB 1241
  4127.      RETURN 852
  4128.  
  4129.  
  4130. ------------------------[ KG072605 ]-------------------------
  4131.  
  4132. Problem:  "R)eview" for block edit made "L)ist".  Shorter string,
  4133. more consistent with L)ist used elsewhere in RBBS.
  4134.  
  4135. Change RBBS-PC.BAS as follows:
  4136.  
  4137. 2530 ZOutTxt$ = "Delete lines " + STR$(Mark1) + "-" + _              ' DA071702
  4138.         MID$(STR$(Mark2),2) + " (Y,[N],L)ist)"                       ' KG072605
  4139.      GOSUB 12930
  4140.      Temp$ = ZUserIn$(ZAnsIndex)                                     ' DA071702
  4141.      CALL AllCaps(Temp$)                                             ' DA071702
  4142.      IF Temp$ = "L" THEN GOTO 2522                                   ' KG072605
  4143.      IF NOT ZYes THEN _
  4144.         ZOutTxt$ = "NOT Deleted" : _
  4145.         GOSUB 12979 : _
  4146.         GOTO 2555
  4147.  
  4148. ------------------------[ KG072604 ]-------------------------
  4149.  
  4150. Problem:  When have no doors installed at all, get msg "All
  4151. doors locked!", which implies there are doors, just are locked.
  4152.  
  4153. Solution:  Change RBBS-PC.BAS as follows:
  4154.  
  4155. 10970 IF NOT ZDoorsAvail OR _
  4156.          (ZRequiredRings = 0 AND NOT ZNoDoorProtect) THEN _
  4157.          CALL QuickTPut1 ("No doors available") : _                  ' KG072604
  4158.          RETURN
  4159.       IF ZTimeLock AND 1 AND NOT ZHasDoored THEN _
  4160.          CALL TimeLock : _
  4161.          IF NOT ZOK THEN _
  4162.             RETURN
  4163.  
  4164. ------------------------[ KG072603 ]-------------------------
  4165.  
  4166. Problem:  Sysop can put commands to reset user's preferences
  4167. anywhere, so msg to go to utilties to reset can be misleading.
  4168.  
  4169. Solution:  Change RBBS-PC.BAS as follows:
  4170.  
  4171. 5400 CALL SkipLine(2)
  4172.      CALL QuickTPut1 ("Your PROFILE")                                ' KG072603
  4173.  
  4174. ------------------------[ KG072602 ]-------------------------
  4175.  
  4176. Problem:  When don't have a MODEMS.SET, and reset modem commands
  4177. to the default, get 0 for modem delay time and others.
  4178.  
  4179. Solution:  Change CONFIG.BAS as follows:
  4180.  
  4181. 15790 FIRMWARE.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0&T5"
  4182.       FIRMWARE.CLEAR.COMMAND$ = "AT&F"
  4183.       FIRMWARE.WRITE.COMMAND$ = "&W"
  4184.       A$(1) = MODEM.ANSWER.COMMAND$
  4185.       A$(2) = MODEM.COUNT.RINGS.COMMAND$
  4186.       A$(3) = MODEM.GO.OFFHOOK.COMMAND$
  4187.       A$(4) = MODEM.INIT.COMMAND$
  4188.       A$(5) = MODEM.RESET.COMMAND$
  4189.       A$(6) = FIRMWARE.INITIALIZE.COMMAND$
  4190.       A$(7) = FIRMWARE.CLEAR.COMMAND$
  4191.       A$(8) = FIRMWARE.WRITE.COMMAND$
  4192.       A$(9) = "NO"                                                   ' KG072602
  4193.       A$(10) = "3"                                                   ' KG072602
  4194.       A$(11) = "2"                                                   ' KG072602
  4195.       A$(12) = "0"                                                   ' KG072602
  4196.       CALL SELMODEM
  4197.       USER.ANSWER.COMMAND$ = A$(1)
  4198.       USER.COUNT.RINGS.COMMAND$ = A$(2)
  4199.       USER.GO.OFFHOOK.COMMAND$ = A$(3)
  4200.       USER.INIT.COMMAND$ = A$(4)
  4201.       USER.RESET.COMMAND$ = A$(5)
  4202.       USER.INITIALIZE.COMMAND$ = A$(6)
  4203.       USER.FIRMWARE.CLEAR.CMND$ = A$(7)
  4204.       USER.FIRMWARE.WRITE.CMND$ = A$(8)
  4205.       RTS$ = A$(9)
  4206.       MODEM.INIT.WAIT.TIME = VAL(A$(10))
  4207.       MODEM.COMMAND.DELAY.TIME = VAL(A$(11))
  4208.       COMMANDS.BETWEEN.RINGS = VAL(A$(12))
  4209.       RETURN
  4210.  
  4211. ------------------------[ KG072601 ]-------------------------
  4212.  
  4213. Problem:  When using routine in Basic to do uppercase, converting
  4214. not just a-z to A-Z.  E.g., "{" became "[".  Causing problems with
  4215. modem strings, especially in CONFIG.
  4216.  
  4217. Solution:  Change RBBSSUB3.BAS as follows:
  4218.  
  4219. (line 58050)
  4220.  
  4221.       SUB AllCaps (ConvertField$) STATIC
  4222.       IF ZTurboRBBS THEN _
  4223.          CALL RBBSULC (ConvertField$) : _
  4224.          EXIT SUB
  4225.       FOR WasZ = 1 TO LEN(ConvertField$)
  4226.          WasX = ASC(MID$(ConvertField$,WasZ,1))                      ' KG072601
  4227.          IF WasX > 96 THEN IF WasX < 123 THEN _                      ' KG072601
  4228.             MID$(ConvertField$,WasZ,1) = CHR$(WasX AND 223)          ' KG072601
  4229.       NEXT
  4230.       END SUB
  4231.  
  4232. Change CNFG-SUB.BAS as follows:
  4233.  
  4234. 61212 ANS$ = "YES"
  4235.       EXIT SUB
  4236.       END SUB
  4237. '  $SUBTITLE: 'ALLCAPS - convert a sting into all capital letters'
  4238. '  $PAGE
  4239. '
  4240. '  SUBROUTINE NAME    --  ALLCAPS
  4241. '
  4242. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  4243. '                         STRNG$         STRING CONTAINING THE QUESTION
  4244. '
  4245. '  OUTPUT PARAMETERS  --  STRNG$         CAPITALIZED STRING
  4246. '
  4247. '  SUBROUTINE PURPOSE --  TO CAPITALIZE A STRING
  4248. '
  4249.       SUB ALLCAPS (STRNG$) STATIC
  4250.       FOR WasZ = 1 TO LEN(STRNG$)                                    ' KG072601
  4251.          WasX = ASC(MID$(STRNG$,WasZ,1))                             ' KG072601
  4252.          IF WasX > 96 THEN IF WasX < 123 THEN _                      ' KG072601
  4253.             MID$(STRNG$,WasZ,1) = CHR$(WasX AND 223)                 ' KG072601
  4254.       NEXT
  4255.       END SUB
  4256. '  $SUBTITLE: 'ASKUPOS - find the unique user field for USERS'
  4257. '  $PAGE
  4258. '
  4259. '  SUBROUTINE NAME    --  ASKUPOS
  4260. '
  4261. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  4262. '                         HDR$           HEADER
  4263. '                         BEGIN.COL      BEGINNING COLUMN OF FIELD
  4264. '                         FIELD.LEN      LENGTH OF FIELD IN USER'S RECORD
  4265. '                         PRMPT$         PROMPT TO GIVE FOR FIELD
  4266. '
  4267. '  OUTPUT PARAMETERS  --  ABOVE INPUTS UPDATED WITH USER'S RESPONSES
  4268. '
  4269. '  SUBROUTINE PURPOSE --  TO ASK THE SYSOP WHAT UNIQUE FIELD IN THE USERS
  4270. '                         RECORD IS TO BE ASKED FOR AT LOGON
  4271. '
  4272.       SUB ASKUPOS (HDR$,BEGIN.COL,FIELD.LEN,PRMPT$) STATIC
  4273.       CLS
  4274.       LOCATE 3,20
  4275.       PRINT HDR$;
  4276.  
  4277. ------------------------[ KG072102 ]-------------------------
  4278.  
  4279. Problem:  When have an empty file LIDXT.DEF, getting untrapped
  4280. error.
  4281.  
  4282. Solution:  Change RBBSSUB5.BAS as follows:
  4283.  
  4284. 63522 RecFoundAt = 0
  4285.       IF High < 1 THEN _                                             ' KG072102
  4286.          EXIT SUB                                                    ' KG072102
  4287.       WasX$ = SPACE$ (NumChars)
  4288.       Done = ZFalse
  4289.       WHILE NOT Done
  4290.          WasI = INT(((High + Low) / 2) + .5)
  4291.          GET 2, WasI
  4292.          LSET WasX$ = MID$(SearchRec$, StartPos, NumChars)
  4293.          IF WasX$ = SearchFor$ THEN _
  4294.             RecFound$ = SearchRec$: _
  4295.             RecFoundAt = WasI : _
  4296.             Done = ZTrue _
  4297.          ELSE IF (High - Low) < 2 THEN _
  4298.                  Done = ZTrue _
  4299.               ELSE IF WasX$ < SearchFor$ THEN _
  4300.                       Low = WasI _
  4301.                    ELSE IF WasX$ > SearchFor$ THEN _
  4302.                            High = WasI
  4303.       WEND
  4304.       END SUB
  4305.  
  4306. ------------------------[ KG072101 ]-------------------------
  4307.  
  4308. Problem:  Conference v)iew is frustrating to use when have
  4309. many conferences because always starts at the top, forcing
  4310. caller to go thru same list every time to get to later conferences.
  4311.  
  4312. Solution:  Keep track of last conference viewed and start listing
  4313. after it.   Will do a complete listing every time of all the files
  4314. if elect to have more, no matter where start initially.
  4315.  
  4316. Change RBBSSUB4.BAS as follows:
  4317.  
  4318. (line 59850)
  4319.  
  4320.       SUB ConfMail (MailCheckConfirm) STATIC
  4321.       SkipJoinUnjoin = ZNonStop
  4322.       IF ZStartHash = 1 AND ZUserFileIndex > 0 THEN _
  4323.          CALL FindIt (ZConfMailList$) _
  4324.       ELSE ZOK = ZFalse
  4325.       IF NOT ZOK THEN _
  4326.          EXIT SUB
  4327.       IF PrevMailList$ <> ZConfMailList$ THEN _                      ' KG072101
  4328.          SkipParms = 0                                               ' KG072101
  4329.       PrevMailList$ = ZConfMailList$                                 ' KG072101
  4330.       IF MailCheckConfirm THEN _
  4331.          ZOutTxt$ = "Check conferences for mail ([Y],N)" : _
  4332.          ZTurboKey = -ZTurboKeyUser : _
  4333.          CALL PopCmdStack : _
  4334.          IF ZNo OR ZSubParm < 0 THEN _
  4335.             EXIT SUB
  4336.       CALL BreakFileName (ZActiveUserFile$,WasX$,NowInPre$,NowInExt$,ZFalse)
  4337.       CALL BreakFileName (ZOrigUserFile$,WasX$,OrigPre$,OrigExt$,ZFalse)
  4338.       CALL SkipLine (1)
  4339.       CALL QuickTPut1 ("Checking Message Bases...")                  ' DA071701
  4340.       AnyMail = ZFalse
  4341.       ZStopInterrupts = ZFalse
  4342.       WasA1$ = ZActiveUserFile$
  4343.       MsgFileSave$ = ZActiveMessageFile$
  4344.       TempIndivValue$ = ""
  4345.       UserFileIndexSave = ZUserFileIndex
  4346.       UserRecordHold$ = ZUserRecord$
  4347.       ZOK = ZTrue
  4348.       CALL ReadParms (ZWorkAra$(),1,SkipParms)                       ' KG072101
  4349.       IF SkipParms = 0 THEN _                                        ' KG072101
  4350.          LogicalEOF$ = "" _                                          ' KG072101
  4351.       ELSE LogicalEOF$ = ZWorkAra$(1)                                ' KG072101
  4352. 59852 IF NOT ZOK THEN _
  4353.          GOTO 59854 _                                                ' KG072101
  4354.       ELSE IF EOF(2) THEN _                                          ' KG072101
  4355.               IF LogicalEOF$ = "" THEN _                             ' KG072101
  4356.                  GOTO 59854 _                                        ' KG072101
  4357.               ELSE CALL FindIt (ZConfMailList$) : _                  ' KG072101
  4358.                    GOTO 59852                                        ' KG072101
  4359.          CALL ReadAny
  4360.          ZActiveUserFile$ = ZOutTxt$
  4361.          CALL ReadAny
  4362.          IF ZErrCode > 0 THEN _
  4363.             GOTO 59854
  4364.          ZActiveMessageFile$ = ZOutTxt$
  4365.          IF ZActiveMessageFile$ = LogicalEOF$ THEN _                 ' KG072101
  4366.             GOTO 59854                                               ' KG072101
  4367.          CALL FindFile (ZActiveUserFile$,ZOK)
  4368.          IF NOT ZOK THEN _
  4369.             GOTO 59854
  4370.          CALL OpenUser (HighestUserRecord)
  4371.          FIELD 5, 128 AS ZUserRecord$
  4372.          CALL FindFile (ZActiveMessageFile$,ZOK)
  4373.          IF NOT ZOK THEN _
  4374.             GOTO 59854
  4375.          CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
  4376.                         0,0,HighestUserRecord,_
  4377.                         Found,HoldUserFileIndex,ZWasSL)
  4378.          IF NOT Found THEN _
  4379.             GOTO 59852
  4380.          CALL OpenMsg
  4381.          FIELD 1, 128 AS ZMsgRec$
  4382.          GET 1,1
  4383.          AnyMail = ZTrue
  4384.          WasX = CVI(MID$(ZUserRecord$,57,2))
  4385.          WasX = (WasX AND 512) > 0
  4386.          CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
  4387.          InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
  4388.          IF InCur THEN _
  4389.             WasX = ZMailWaiting : _                                  ' KG030101
  4390.             ZWasA = ZLastMsgRead _
  4391.          ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
  4392.          ZWasB = VAL(LEFT$(ZMsgRec$,8))
  4393.          WasZ = (ZWasB - ZWasA)
  4394.          IF WasZ < 0 THEN _
  4395.             ZWasA = 0 : _
  4396.             WasZ = ZWasB _
  4397.          ELSE IF WasZ = 0 THEN _
  4398.                  WasX = ZFalse
  4399.          ZOutTxt$ = MID$(STR$((ZWasB > ZWasA) * WasZ),2)
  4400.          ZWasSL = LEN(ZOutTxt$)
  4401.          ZOutTxt$ = SPACE$(-(ZWasSL<4) * (4-ZWasSL)) + ZOutTxt$
  4402.          ZWasSL = LEN(CurPre$)
  4403.          IF CurPre$ = "USERS" AND CurExt$ = "" THEN _
  4404.             Conf$ = "MAIN" _
  4405.          ELSE Conf$ = LEFT$(CurPre$,ZWasSL-1)
  4406.          ZWasY$ = Conf$ + SPACE$(-(ZWasSL<8) * (8-ZWasSL))
  4407.          IF WasX THEN _
  4408.             WasX$ = ZEmphasizeOn$ : _
  4409.             ZWasZ$ = ZEmphasizeOff$ _
  4410.          ELSE WasX$ = "" : _
  4411.               ZWasZ$ = ""
  4412.          ZOutTxt$ = ZWasY$ + ": " + ZOutTxt$ + " new message(s): " + _
  4413.               WasX$ + MID$(" None *Some*",-6 * WasX + 1,6) + " to you" + ZWasZ$
  4414.          ZSubParm = 5
  4415.          CALL TPut
  4416.          IF SkipJoinUnjoin THEN _
  4417.             CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) : _
  4418.             GOTO 59853
  4419.          SkipParms = SkipParms + 2                                   ' KG072101
  4420.          ZTurboKey = -ZTurboKeyUser
  4421.          CALL AskMore (",J)oin,U)njoin",ZTrue,ZFalse,WasX,ZFalse)
  4422.          IF ZNo THEN _
  4423.             GOTO 59854
  4424.          WasX$ = LEFT$(ZUserIn$(1),1)
  4425.          CALL AllCaps (WasX$)
  4426.          IF WasX$ = "J" THEN _
  4427.             ZHomeConf$ = Conf$ : _
  4428.             GOTO 59854
  4429.          IF WasX$ = "U" THEN _
  4430.             IF InCur OR (OrigPre$ = CurPre$ AND OrigExt$ = CurExt$) THEN _
  4431.                CALL QuickTPut1 ("Can't omit yourself from the board or conference you're in") _
  4432.             ELSE LSET ZUserRecord$ = CHR$(0) + "deleted user" : _
  4433.                  ZUserFileIndex = HoldUserFileIndex : _
  4434.                  ZSubParm = 6 : _
  4435.                  CALL FileLock : _
  4436.                  PUT 5, HoldUserFileIndex : _
  4437.                  ZSubParm = 8 : _
  4438.                  CALL FileLock : _
  4439.                  CALL QuickTPut1 ("Omitted you from " + Conf$)
  4440.  
  4441. 59854 ZActiveUserFile$ = WasA1$
  4442.       CALL OpenUser (HighestUserRecord)
  4443.       FIELD 5, 128 AS ZUserRecord$
  4444.       IF (NOT ZRet) AND NOT AnyMail THEN _
  4445.          CALL QuickTPut1 ("You have not joined any conferences")
  4446.       ZUserFileIndex = UserFileIndexSave
  4447.       LSET ZUserRecord$ = UserRecordHold$
  4448.       ZActiveMessageFile$ = MsgFileSave$
  4449.       CALL OpenMsg
  4450.       FIELD 1, 128 AS ZMsgRec$
  4451.       GET 1,1
  4452.       ZNonStop = (ZPageLength > 0)
  4453.       WasX$ = ZUserIn$(ZAnsIndex+1)                                  ' KG071202
  4454.       CALL AllCaps (WasX$)                                           ' KG071202
  4455.       ZAnsIndex = ZAnsIndex - (WasX$ = "C")                          ' KG071202
  4456.       SkipParms = -(NOT EOF(2))*SkipParms                            ' KG072101
  4457.       END SUB
  4458.  
  4459. ------------------------[ DA071803 ]-------------------------
  4460.  
  4461. Problem:  When using non-date-sorted FMS directory, still says every
  4462. 1000 files into a search that files are searched thru a certain date.
  4463.  
  4464. Solution:  just report number of files searched.
  4465.  
  4466. Change RBBSSUB3.BAS as follows:
  4467.  
  4468. 58178 IF ZLinesPrinted <= MaxPrint AND (FMSCheckPoint MOD 1000 <> 0) THEN _  ' DA071803
  4469.          GOTO 58168
  4470.       CALL CheckCarrier
  4471.       IF ZSubParm = -1 THEN _
  4472.          GOTO 58183
  4473.       CALL TimeRemain (MinsRemaining)
  4474.       IF MinsRemaining <= 0 THEN _
  4475.          ZSubParm = -1 : _
  4476.          GOTO 58183
  4477.       IF ZNonStop THEN _
  4478.          GOTO 58168
  4479.       IF ZLinesPrinted <= MaxPrint THEN _
  4480.          IF ZDateOrderedFMS THEN _                                   ' DA071803
  4481.             CALL QuickTPut1 (ZEmphasizeOff$ + _                      ' DA071803
  4482.                "Files checked thru " + MID$(PartToPrint$,24,8)) _    ' DA071803
  4483.          ELSE _                                                      ' DA071803
  4484.             CALL QuickTPut1 (ZEmphasizeOff$ + STR$(FMSCheckPoint) + _  ' DA071803
  4485.                " files checked")                                     ' DA071803
  4486.  
  4487. (line 58180)
  4488.          .
  4489.          .
  4490.          .
  4491.       IF ZNonStop THEN IF UpldIndex > 999 THEN _
  4492.          IF (SearchDate$ = "" OR NOT ZExpertUser) THEN _
  4493.             ZOutTxt$ = STR$(UpldIndex) + _
  4494.                " lines left to search.  Really go non-stop? (Y/[N])" : _
  4495.             ZNoAdvance = ZTrue : _
  4496.             ZTurboKey = -ZTurboKeyUser : _
  4497.             ZSubParm = 1 : _
  4498.             CALL TGet : _
  4499.             CALL WipeLine (79) : _
  4500.             ZNonStop = ZYes                                          ' DA071803
  4501.       GOTO 58168
  4502.  
  4503. ------------------------[ DA071801 ]-------------------------
  4504.  
  4505. Problem:  code not using built in function.  Makes shorter and more
  4506. consistent, as well as easier to change.
  4507.  
  4508. Change RBBSSUB4.BAS as follows:
  4509.  
  4510. 58900 ZOutTxt$ = ZDirPrompt$
  4511.       ZMacroMin = 2
  4512.       CALL PopCmdStack
  4513.       IF ZWasQ = 0 OR ZSubParm = -1 THEN _
  4514.          EXIT SUB
  4515.       CALL AllCaps (ZUserIn$(ZAnsIndex))
  4516.       IF ZUserIn$(ZAnsIndex) = "Q" THEN _
  4517.          ZWasQ = 0 : _
  4518.          EXIT SUB
  4519.       ZWasA = INSTR("E+.E-.E.L.H.?.",ZUserIn$(ZAnsIndex)+".")
  4520.       IF ZWasA = 0 THEN _
  4521.          EXIT SUB
  4522.       IF ZWasA > 8 THEN _
  4523.          IF ZAnsIndex < ZLastIndex THEN _
  4524.             GOTO 58900 _
  4525.          ELSE GOTO 58902
  4526.       IF ZWasA = 7 THEN _
  4527.          ZExtendedOff = NOT ZExtendedOff _
  4528.       ELSE ZExtendedOff = (ZWasA > 3)
  4529.       CALL QuickTPut1 ("Extended directory display "+FNOffOn$(NOT ZExtendedOff)) ' DA071801
  4530.       GOTO 58900
  4531.  
  4532. ------------------------[ DA071702 ]-------------------------
  4533.  
  4534. Problem:  in block delete, text about to be deleted was displayed
  4535. automatically.   Change to give option to review first.   Useful when
  4536. very short block already see or very large blocks, where want to
  4537. not see.
  4538.  
  4539. Change RBBS-PC.BAS as follows:
  4540.  
  4541. 2520 ZOutTxt$ = "Up to and including Line # (ENTER =" + STR$(Mark1) + ")"
  4542.      GOSUB 3302
  4543.      IF ZWasQ = 0 THEN _
  4544.         Mark2 = Mark1 _
  4545.      ELSE Mark2 = ZTestedIntValue
  4546.      CALL SkipLine(1)
  4547.      IF Mark1 > Mark2 THEN _
  4548.         ZOutTxt$ = "Beginning exceeds end.  Block NOT deleted" : _   ' DA071701
  4549.         GOSUB 12979 : _
  4550.         GOTO 2555
  4551.      IF Mark1 <= MsgLockLines THEN _
  4552.         ZOutTxt$ = "You can NOT delete lines 1 -" + STR$(MsgLockLines) + "!" : _
  4553.         GOSUB 12979 : _
  4554.         GOTO 2555
  4555.      GOTO 2530                                                       ' DA071702
  4556.  
  4557. 2530 ZOutTxt$ = "Delete lines " + STR$(Mark1) + "-" + _              ' DA071702
  4558.         MID$(STR$(Mark2),2) + " (Y,[N],R)eview)"                     ' DA071702
  4559.      GOSUB 12930
  4560.      Temp$ = ZUserIn$(ZAnsIndex)                                     ' DA071702
  4561.      CALL AllCaps(Temp$)                                             ' DA071702
  4562.      IF Temp$ = "R" THEN GOTO 2522                                   ' DA071702
  4563.      IF NOT ZYes THEN _
  4564.         ZOutTxt$ = "NOT Deleted" : _
  4565.         GOSUB 12979 : _
  4566.         GOTO 2555
  4567.  
  4568. ------------------------[ DA071701 ]-------------------------
  4569.  
  4570. Text made shorter, clearer, and more consistent, especially in use of
  4571. capitalization.   Sometimes only cosmetic change to Basic code.  Numerous
  4572. changes over different modules.  Not listed here.
  4573.  
  4574. ------------------------[ ML071502 ]-------------------------
  4575.  
  4576. Problem:  When viewing separate commends file, sometimes does not
  4577. display lines right because inherits a search string from prior
  4578. processing.
  4579.  
  4580. Change RBBSSUB5.BAS as follows:
  4581.  
  4582. 20122 CALL OpenWork (2,ZFileName$)
  4583.       IF ZErrCode = 53 THEN _
  4584.          ZOutTxt$ = "Missing File " + ZFileName$ : _
  4585.          CALL UpdtCalr (ZOutTxt$,2) : _
  4586.          ZOutTxt$ = ZOutTxt$ + _
  4587.               ". Please tell SYSOP" : _
  4588.          GOSUB 21650 : _
  4589.          RETURN
  4590.       ZJumpSupported = ZTrue
  4591.       ZJumpLast$ = ""
  4592.       LastOK = ZFalse
  4593.       ZJumpSearching = ZFalse                                        ' ML071502
  4594.  
  4595. ------------------------[ ML071501 ]-------------------------
  4596.  
  4597. Problem:  Fixes a fix, so that L)ist in extended description entry
  4598. works right.
  4599.  
  4600. Change RBBS-PC.BAS as follows:
  4601.  
  4602. 3020 IF ZGetExtDesc THEN WasL = 1                                    ' ML071501
  4603.      FOR WasX = WasL TO ZLinesInMsg                                  ' ML071501
  4604.         CALL AskMore ("",ZTrue,ZTrue,WasXX,ZFalse)
  4605.         IF ZNo OR ZRet THEN _
  4606.            WasX = ZLinesInMsg + 1 _
  4607.         ELSE ZOutTxt$ = RIGHT$(STR$(WasX),2) + _
  4608.                   ": " + _
  4609.                   ZOutTxt$(WasX) : _
  4610.              GOSUB 12979
  4611.      NEXT
  4612.      RETURN
  4613.  
  4614. ------------------------[ ML062202 ]-------------------------
  4615.  
  4616. Problem:  When search in msg header for any part of "(R)" and reply to
  4617. a reply, can get "(R)(R)" in subject.
  4618.  
  4619. Solution:  Change RBBS-PC.BAS as follows:
  4620.  
  4621. 4621   IF ZUserSecLevel < ZOptSec(5) THEN _
  4622.           ZViolation$ = "MORE RE" : _
  4623.           GOSUB 1380 : _
  4624.           ZReply = ZFalse : _
  4625.           GOTO 4629
  4626.        IF LEFT$(OrigSubject$,3) <> "(R)" THEN _                      ' ML062202
  4627.           OrigSubject$ = "(R)" + _
  4628.                      LEFT$(OrigSubject$,22)
  4629.  
  4630. ------------------------[ ML062201 ]-------------------------
  4631.  
  4632. Problem:  Variable UserSecLevelSave was being tested for whether person
  4633. doing editing of user record was SysOp, but variable was set only when
  4634. A)dd a user and not ever time in user maintenance.
  4635.  
  4636. Change RBBS-PC.BAS as follows:
  4637.  
  4638. 11000 WasTU = ZUserFileIndex
  4639.       CALL DefaultU
  4640.       UserRecordHold$ = ZUserRecord$
  4641.       RegDateHold$ = ZRegDate$
  4642.       UserSecLevelSave = ZUserSecLevel                               ' ML062201
  4643.  
  4644. 12300 WasA1$ = ""
  4645.       Attempts = 0                                                   ' ML062201
  4646.       FirstNameSave$ = ZFirstName$
  4647.       LastNameSave$ = ZLastName$
  4648.       ActiveUserNameSave$ = ZActiveUserName$
  4649.       CityStateSave$ = ZWasCI$
  4650.       HashValueSave$ = HashValue$
  4651.       IndivValueSave$ = ZIndivValue$                                 ' RC050901
  4652.       GOSUB 12500
  4653.       GOSUB 12840
  4654.       GOSUB 12850
  4655.       GOSUB 12598
  4656.       IF ZUserFileIndex = 0 THEN _
  4657.          GOSUB 12984 : _
  4658.          GOTO 12330
  4659.       IF Found THEN _
  4660.          WasD$ = "User already exists" : _
  4661.          GOSUB 1315 : _
  4662.          GOSUB 12984 : _
  4663.          GOTO 12330
  4664.  
  4665. ------------------------[ ML061905 ]-------------------------
  4666.  
  4667. Problem:  When using msg editor to enter an extended description,
  4668. RBBS displays erroneous To: and From:.
  4669.  
  4670. Solution:  Change RBBS-PC.BAS as follows:
  4671.  
  4672. 3010 ZStopInterrupts = ZFalse
  4673.      CALL SkipLine (1)
  4674.      IF (ZWasQ = 1 OR MsgFwd) AND NOT ZGetExtDesc THEN _             ' ML061905
  4675.         WasL = 1 : _
  4676.         ZOutTxt$ = ZFG3$ + "To: " + _
  4677.              MsgTo$ + _
  4678.              ZFG4$ + " Re: " + _
  4679.              Subject$ + ZEmphasizeOff$ : _
  4680.         GOSUB 12979 : _
  4681.         CALL QuickTPut (MID$("    ",1,-4 * (NOT ZRemoteEcho)),0) : _
  4682.         GOSUB 3200
  4683.  
  4684. ------------------------[ ML061904 ]-------------------------
  4685.  
  4686. Problem:  People often only decide whether should be private after
  4687. they compose it, but are asked before composing about status.
  4688.  
  4689. Solution:  Move question on protection after the save.
  4690.  
  4691. Make the following changes to RBBS-PC.BAS.
  4692.  
  4693. 2020 CALL MessageTo (HighestUserRecord,MsgTo$,MsgFrom$,RcvrRecNum,Found)
  4694.      IF MsgTo$ = "" THEN _
  4695.         RETURN
  4696.      IF ZSysopComment OR SysopMsg THEN _                             ' ML061904
  4697.         GOTO 2100                                                    ' ML061904
  4698.      IF ZReply OR MsgFwd THEN _
  4699.         Found = ZTrue : _
  4700.         CALL Trim (MsgTo$):  _
  4701.         GOTO 2035 _
  4702.      ELSE Subject$ = ""
  4703.      GOSUB 2065
  4704. 2035 IF QuotedReply THEN _                                           ' ML061904
  4705.         RETURN
  4706.      GOTO 2100
  4707.  
  4708. 3405 SaveReplyStatus = ZReply                                        ' ML061904
  4709.      ZReply = ZTrue                                                  ' ML061904
  4710.      IF SysopMsg THEN _                                              ' ML061904
  4711.         MsgPswd$ = "^READ^" _                                        ' ML061904
  4712.      ELSE CALL MsgProt (MsgTo$,Found,MsgPswd$)                       ' ML061904
  4713.      SysopMsg = ZFalse                                               ' ML061904
  4714.      ZReply = SaveReplyStatus                                        ' ML061904
  4715.      GOSUB 4910                                                      ' ML061904
  4716.      MsgRecSave$ = ZMsgRec$
  4717.      MsgCorrected = ZFalse
  4718.      GOSUB 23100
  4719.      ZOutTxt$ = "Adding new msg #" + _
  4720.           STR$(HighMsgNumber + 1)
  4721.      IF NOT ZLocalUser THEN _
  4722.         CALL UpdtCalr (ZOutTxt$,1)
  4723.      GOSUB 12978
  4724.      ZWasSL = 0
  4725.      ZWasN$ = ""
  4726.      ZLastIndex = 0
  4727.      IF LowMsgNumber = 0 THEN _
  4728.         LowMsgNumber = 1 : _
  4729.         HighMsgNumber = 1 _
  4730.      ELSE HighMsgNumber = HighMsgNumber + 1
  4731.  
  4732. ------------------------[ KG071903 ]-------------------------
  4733.  
  4734. Problem:  Can never select "H" for a protocol choice.  Also, ? in
  4735. response to protocol choice ignored instead of giving help.
  4736.  
  4737. Solution:  Change RBBSSUB3.BAS as follows:
  4738.  
  4739. 21610 CALL AllCaps (ZWasZ$)
  4740.       ZFF = INSTR(ZDefaultXfer$,ZWasZ$)                              ' KG071903
  4741.       IF ZFF > 0 THEN _                                              ' KG071903
  4742.          GOTO 21612                                                  ' KG071903
  4743.       IF INSTR("H?",ZWasZ$) > 0 THEN _                               ' KG071903
  4744.          GOTO 21602                                                  ' KG071903
  4745.       GOTO 21600                                                     ' KG071903
  4746.  
  4747. ------------------------[ KG071902 ]-------------------------
  4748.  
  4749. String shortened to reduce size of EXE.
  4750.  
  4751. Change RBBSSUB4.BAS as follows:
  4752.  
  4753. (line 62620)
  4754.  
  4755.       SUB Transfer STATIC
  4756.       IF ZPrivateDoor THEN _
  4757.          CALL PrivDoorRtn : _
  4758.          EXIT SUB
  4759.       IF ZTransferFunction = 1 THEN _
  4760.          ZUserIn$ = ZDownTemplate$ : _
  4761.          ZWasZ$ = "send " _
  4762.       ELSE IF ZTransferFunction = 2 THEN _
  4763.               ZUserIn$ = ZUpTemplate$ : _
  4764.               ZWasZ$ = "receive "
  4765.       CALL MetaGSR (ZUserIn$,ZFalse)
  4766.       CALL QuickTPut1 ("Protocol     : "+ZProtoPrompt$)
  4767.       CALL QuickTPut ("Ready to " + ZWasZ$ + " ",0)
  4768.       IF ZBatchTransfer THEN _
  4769.          CALL QuickTPut1 ("(BATCH)") : _
  4770.          CALL OpenWork (2,ZNodeWorkFile$) : _
  4771.          WHILE NOT EOF(2) : _
  4772.            CALL ReadAny : _
  4773.            CALL BreakFileName (ZOutTxt$,ZWasZ$,ZWasY$,WasX$,ZTrue) : _
  4774.            CALL QuickTPut1 ("   "+ZWasY$+WasX$) : _
  4775.          WEND _
  4776.       ELSE CALL QuickTPut1 (ZFileNameHold$)
  4777.       IF ZAutoLogoffReq THEN _
  4778.          CALL QuickTPut1 ("Automatic logoff, if download OK")        ' KG071902
  4779.       CALL PrivDoorRtn
  4780.       END SUB
  4781.  
  4782. ------------------------[ KG071901 ]-------------------------
  4783.  
  4784. Problem:   When try to download a file that violates the security
  4785. in FILESEC, RBBS says a file with no name is not found and asks for
  4786. correct name, rather than just skipping.
  4787.  
  4788. Solution:  Change RBBSSUB3.BAS as follows:
  4789.  
  4790. 35000 ' $SUBTITLE: 'FlushKeys - Completely flush all user input'
  4791. ' $PAGE
  4792. '
  4793. '  NAME    -- FlushKeys
  4794. '
  4795.       SUB FlushKeys STATIC
  4796.       CALL FlushCom (ZWasY$)                                         ' KG071901
  4797.       ZLastIndex = 0
  4798.       REDIM ZUserIn$(ZMsgDim)
  4799.       END SUB
  4800.  
  4801. ------------------------[ KG071301 ]-------------------------
  4802.  
  4803. Mixed bad of changes to reduce size of EXE.  Mainly shortening
  4804. strings, but also eliminating operations.   Question eliminated on
  4805. logon whether terminal supports only upper case, since virtually
  4806. all do.   Now have to go into utilities to change to toggle into
  4807. upper case.
  4808.  
  4809. Change RBBS-PC.BAS as follows:
  4810.  
  4811. 31  ZSnoop = ZTrue
  4812.     CALL PScrn ("Configuration "+ZConfigFileName$+" missing/improper format") : _ ' KG071301
  4813.     GOTO 204
  4814.  
  4815. 345 LOCATE 24,1
  4816.     CALL AMorPM
  4817.     ZUserLogonTime! = TIMER
  4818.     ZTimeLoggedOn$ = TIME$
  4819.     ZLinesPrinted = 0
  4820.     ZExpertUserDef = ZExpertUser
  4821.     ZExpertUser = ZFalse
  4822.     CALL SetExpert
  4823.     ZOutTxt$ = ""
  4824.     IF NodesInSystem > 1 THEN _
  4825.        ZOutTxt$ = " - NODE " + ZNodeID$
  4826.     IF ZReliableMode THEN _
  4827.        ZOutTxt$ = ZOutTxt$ + " (Reliable)"                           ' KG071301
  4828.     CALL QuickTPut1 ("WELCOME TO " + ZRBBSName$ + ZOutTxt$)
  4829.     ZTestParity = ZTrue
  4830.     ZStopInterrupts = ZTrue
  4831.     ZFileName$ = ZPreLog$
  4832.     CALL FlushCom (WasX$)
  4833.     ZCommPortStack$ = ""
  4834.  
  4835. 760 GOSUB 755
  4836.     CALL AllCaps (ZWasZ$)
  4837.     LSET ZPswd$ = ZWasZ$
  4838.     CALL QuickTPut1 ("Please REMEMBER your password")
  4839.     ZUserTextColor = 37
  4840.     ZTempSecLevel = ZUserSecLevel
  4841.     CALL Protocol
  4842.     ZUserXferDefault$ = "N"
  4843.     ZProtoPrompt$ = "None"
  4844.     IF ZNewUserSetsDefaults THEN _                                   ' KG071301
  4845.        ZBypassTimeCheck = ZTrue : _
  4846.        GOSUB 43000 : _
  4847.        ZBypassTimeCheck = ZFalse : _
  4848.        CALL Graphic (ZUserGraphicDefault$,ZFileName$) : _
  4849.        GOSUB 42805 : _
  4850.        GOSUB 42700 _
  4851.     ELSE ZUpperCase = ZFalse : _
  4852.          ZHiLiteOff = ZTrue : _
  4853.          CALL SetGraphic (0,ZUserGraphicDefault$) : _
  4854.          ZNulls = ZFalse
  4855.     ZPageLength = ZPageLengthDef
  4856.     GOSUB 12900
  4857.     GOSUB 5135
  4858.     CALL DefaultU
  4859.  
  4860. 2600 ZOutTxt$ = "Edit"
  4861.      GOSUB 3300
  4862.      IF ZTestedIntValue <= MsgLockLines THEN _
  4863.         ZOutTxt$ = "Not permitted to change 1st" + _                 ' KG071301
  4864.                     STR$(MsgLockLines) + " line(s)" : _
  4865.         GOSUB 12979 : _
  4866.         GOTO 2300
  4867.      CALL EditALine (ZTestedIntValue)
  4868.      IF ZSubParm < 0 THEN _
  4869.         GOTO 202
  4870.      GOTO 2300
  4871.  
  4872. 4710 ZOutTxt$ = "Page " + _
  4873.           ZSysopFirstName$ + _
  4874.           " (Y/[N])"
  4875.      CALL SkipLine (1)
  4876.      GOSUB 12999
  4877.      IF NOT ZYes THEN _
  4878.         RETURN
  4879.      PageCount = 0
  4880.      ZOutTxt$ = "Paging " + _
  4881.           ZSysopFirstName$                                           ' KG071301
  4882.      GOSUB 12978
  4883.      PageTimeStart! = TIMER
  4884.  
  4885. 13600 CLS
  4886.       LOCATE ,,0
  4887.       CALL PScrn (ZWasDF$ + " file missing/invalid.  Run CONFIG")    ' KG071301
  4888.       CALL DelayTime (3)
  4889.       GOTO 203
  4890.  
  4891. 23100 GET 1,ZNextMsgRec
  4892.       IF MID$(ZMsgRec$,61,1) = ":" THEN _
  4893.          CALL CheckInt (MID$(ZMsgRec$,117,4)) : _
  4894.          IF ZErrCode = 0 AND (ZTestedIntValue > 1) AND (ZTestedIntValue < 100) THEN _
  4895.             WasY = ZTestedIntValue : _
  4896.             CALL CheckInt (MID$(ZMsgRec$,2,4)) : _
  4897.             IF ZErrCode = 0 AND ZTestedIntValue > HighMsgNumber THEN _
  4898.                HighMsgNumber = ZTestedIntValue : _
  4899.                ZNextMsgRec = ZNextMsgRec + WasY : _
  4900.                CALL QuickTPut1 ("Fixing Msg Header") : _             ' KG071301
  4901.                MsgCorrected = ZTrue : _
  4902.                GOTO 23100
  4903.       RETURN
  4904.  
  4905. Omit line 42950.
  4906.  
  4907. Change RBBSSUB2.BAS as follows:
  4908.  
  4909. (line 97)
  4910.  
  4911.       SUB CopyRight STATIC
  4912.    ZWasA = (ZRecycleToDos OR ZDebug OR ZNodeRecIndex > 2)
  4913.    IF ZWasA THEN _
  4914.       EXIT SUB
  4915.    WIDTH 80
  4916.    REDIM ZOutTxt$(11)
  4917.    ZOutTxt$(1) = "If you use RBBS-PC CPC17.3A, please consider contributing to"
  4918.    ZOutTxt$(2) = ""
  4919.    ZOutTxt$(3) = "             Capital PC Software Exchange"
  4920.    ZOutTxt$(4) = "                 Post Office Box 6128"
  4921.    ZOutTxt$(5) = "            Silver Spring, Maryland  20906"
  4922.    ZOutTxt$(6) = ""
  4923.    ZOutTxt$(7) = "You are free to copy/share RBBS-PC CPC17.3A provided" ' KG071301
  4924.    ZOutTxt$(08)= "  1.  This program is distributed unmodified"
  4925.    ZOutTxt$(09)= "  2.  No fee or consideration is charged for RBBS-PC itself"
  4926.    ZOutTxt$(10)= "  3.  This notice is not bypassed or removed."
  4927.        .
  4928.        .
  4929.        .
  4930.  
  4931. 4777 ZWasCM = 0
  4932.      CALL CheckTime(TimeChatStarted!,Elapsed!, 2)
  4933.      ZSecsPerSession! = ZSecsPerSession! + Elapsed!
  4934.      IF NOT ZLocalUser THEN _
  4935.         ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
  4936.      CALL QuickTPut("  Chat over.  BBS resuming",2)                  ' KG071301
  4937.      END SUB
  4938.  
  4939. (line 5507)
  4940.  
  4941.      SUB Baud450 STATIC
  4942.      IF ZBPS <> -1 THEN _
  4943.         CALL QuickTPut1 ("Sorry, only 300 baud can change speed") : _
  4944.         EXIT SUB
  4945.      IF ZFossil THEN _
  4946.         CALL QuickTPut1 ("Sorry, no 450 baud under FOSSIL") : _      ' KG071301
  4947.         EXIT SUB
  4948.      ZOutTxt$ = "Change to 450 baud (Y,[N])"
  4949.      ZTurboKey = -ZTurboKeyUser
  4950.      ZSubParm = 1
  4951.      CALL TGet
  4952.      IF ZSubParm = -1 OR NOT ZYes THEN _
  4953.         EXIT SUB
  4954.  
  4955. ------------------------[ KG071202 ]-------------------------
  4956.  
  4957. Problem:  Stacked command at main menu to "v c" interpreted as
  4958. View continuously and then leave comment.   Caused by change
  4959. in 070901.   Very tricky to inteprete stacked commands.
  4960.  
  4961. Solution:  Change RBBSSUB4.BAS as follows:
  4962.  
  4963. 59854 ZActiveUserFile$ = WasA1$
  4964.       CALL OpenUser (HighestUserRecord)
  4965.       FIELD 5, 128 AS ZUserRecord$
  4966.       IF (NOT ZRet) AND NOT AnyMail THEN _
  4967.          CALL QuickTPut1 ("You have not joined any conferences")
  4968.       ZUserFileIndex = UserFileIndexSave
  4969.       LSET ZUserRecord$ = UserRecordHold$
  4970.       ZActiveMessageFile$ = MsgFileSave$
  4971.       CALL OpenMsg
  4972.       FIELD 1, 128 AS ZMsgRec$
  4973.       GET 1,1
  4974.       ZNonStop = (ZPageLength > 0)
  4975.       WasX$ = ZUserIn$(ZAnsIndex+1)                                  ' KG071202
  4976.       CALL AllCaps (WasX$)                                           ' KG071202
  4977.       ZAnsIndex = ZAnsIndex - (WasX$ = "C")                          ' KG071202
  4978.       END SUB
  4979.  
  4980. ------------------------[ KG071201 ]-------------------------
  4981.  
  4982. Problem:  When execute a macro within a macro, not looking in the
  4983. drive/path specified in config when the macro name has an extension
  4984. but no drive/path.
  4985.  
  4986. Solution:  Change RBBSSUB2.BAS as follows:
  4987.  
  4988. (line 1325)
  4989.  
  4990.      SUB Macro (Strng$,MacroFound) STATIC
  4991.      MacroFound = ZFalse
  4992.      FilName$ = Strng$                                               ' KG071201
  4993.      CALL BreakFileName (FilName$,ZWasDF$,Prefix$,WasX$,ZFalse)      ' KG071201
  4994.      IF WasX$ = "" THEN _                                            ' KG071201
  4995.         FilName$ = Strng$ + ZMacroExtension$                         ' KG071201
  4996.      IF ZWasDF$ = "" THEN _                                          ' KG071201
  4997.         FilName$ = ZMacroDrvPath$ + FilName$                         ' KG071201
  4998.      CALL BadFile (FilName$,ZWasA)
  4999.      IF ZWasA > 1 THEN _
  5000.         EXIT SUB
  5001.      CALL GRAPHICX (ZUserGraphicDefault$,FilName$,6)
  5002.      IF NOT ZOK THEN _
  5003.         EXIT SUB
  5004.      CALL ReadDir (6,1)
  5005.      IF ZErrCode > 0 THEN _
  5006.         EXIT SUB
  5007.      CALL CheckInt (ZOutTxt$)
  5008.      IF ZErrCode > 0 OR ZUserSecLevel < ZTestedIntValue THEN _
  5009.         EXIT SUB
  5010.      ZWasA = INSTR(ZOutTxt$,"/")
  5011.      IF ZWasA > 0 THEN _    ' Check macro contraint
  5012.         WasX$ = RIGHT$(ZOutTxt$,LEN(ZOutTxt$)-ZWasA) : _
  5013.         IF RIGHT$(WasX$,1) = "/" THEN _
  5014.            IF ZLastCommand$ <> LEFT$(WasX$,LEN(WasX$)-1) THEN _
  5015.               EXIT SUB _
  5016.            ELSE GOTO 1327 _
  5017.         ELSE IF LEFT$(ZLastCommand$,LEN(WasX$)) <> WasX$ THEN _
  5018.                 EXIT SUB
  5019.  
  5020. ------------------------[ DA071101 ]-------------------------
  5021.  
  5022. Problem:  When conference is full, rejoin main, and try to enter
  5023. a message, told it is full too.
  5024.  
  5025. Solution:  Change RBBS-PC.BAS as follows:
  5026.  
  5027. 2000 QuotedReply = ZFalse
  5028.      MsgFrom$ = ZActiveUserName$
  5029.      SysopMsg = ZFalse                                               ' MB051601
  5030.      GOSUB 1893                                                      ' DA071101
  5031.  
  5032. ------------------------[ KG071101 ]-------------------------
  5033.  
  5034. Problem:  When people are non-subscribers they should never get
  5035. a message warning them about the expiration of there subscribers.
  5036. But they will, even when their subscription level is below the
  5037. subscriber level.
  5038.  
  5039. Solution:  Change RBBS-PC.BAS as follows:
  5040.  
  5041. 832 IF ZRestrictByDate AND ZDaysInRegPeriod > 0 THEN _
  5042.        IF ZRegDaysRemaining <= ZDaysToWarn AND _
  5043.           ZRegDaysRemaining > 0 AND ZUserSecLevel > ZExpiredSec THEN _ ' KG071101
  5044.              CALL QuickTPut1 ("Registration EXPIRES in" + _
  5045.                        STR$(ZRegDaysRemaining) + " days!") : _
  5046.              CALL BufFile(ZHelpPath$+"RGXPIRE"+ZHelpExtension$,WasX) : _
  5047.              IF NOT ZOk THEN CALL DelayTime (5)
  5048.     IF (NOT ZReqQuesAnswered) AND _
  5049.        ZReqQues$ <> "" THEN _
  5050.          ZFileName$ = ZReqQues$ : _
  5051.          GOSUB 11520 : _
  5052.          IF ZOK THEN _
  5053.             ZReqQuesAnswered = ZTrue                                 ' KG052701
  5054.  
  5055. ------------------------[ KG071001 ]-------------------------
  5056.  
  5057. Problem:  When an FMS entry began with "=", it was never being
  5058. counted as a possible new file on logon, even though it could be listed
  5059. as a new file when the caller had sufficient security to view.
  5060.  
  5061. Solution:  Change RBBSSUB3.BAS as follows:
  5062.  
  5063. 58140 ' $SUBTITLE: 'LoadNew - subroutine to get latest uploads'
  5064. ' $PAGE
  5065. '
  5066. '  NAME    -- LoadNew
  5067. '
  5068. '  INPUTS  --     PARAMETER           MEANING
  5069. '               ZUpldDir$             LIST OF FILES UPLOADED
  5070. '
  5071. '  OUTPUTS --   ZOutTxt$              LATEST UPLOADS
  5072. '
  5073. '  PURPOSE -- Loads table of most recent number of uploads by date
  5074. '
  5075.       SUB LoadNew (Ara(2)) STATIC
  5076.       IF ZFMSDirectory$ = "" THEN _
  5077.          EXIT SUB
  5078.       ZPrevBase$ = ""
  5079.       FirstWarning = ZTrue                                           ' KG041103
  5080.       IF PrevLoadNew$ = ZFMSDirectory$ THEN _
  5081.          Ara(1,1) = 0 : _
  5082.          EXIT SUB
  5083.       PrevLoadNew$ = ZFMSDirectory$
  5084.       CALL OpenFMS (LastRec)
  5085.       FIELD 2, 23 AS PreDate$, _
  5086.                 2 AS WasMM$, _
  5087.                 1 AS Fill1$, _
  5088.                 2 AS WasDD$, _
  5089.                 1 AS Fill2$, _
  5090.                 2 AS Year$, _
  5091.                 (2 + ZMaxDescLen) AS Desc$, _                        ' KG071001
  5092.                 3 AS Category$, _
  5093.                 2 AS Fill4$
  5094.       MaxRecs = UBOUND(Ara,1)
  5095.       IF MaxRecs < 1 THEN _
  5096.          MaxRecs = 1 _
  5097.       ELSE IF MaxRecs > 23 THEN _
  5098.               MaxRecs = 23
  5099.       WasL = 0
  5100.       WasK = LastRec
  5101.       WHILE WasK > 0 AND WasL < MaxRecs
  5102.          GET #2,WasK
  5103.          IF INSTR("\ ",LEFT$(PreDate$,1)) > 0 THEN _                 ' KG071001
  5104.             GOTO 58142
  5105.          IF (ZCanDnldFromUp OR Category$ <> ZDefaultCatCode$) THEN _
  5106.             IF VAL(Year$) > 79 THEN _                                ' KG041103
  5107.                WasL = WasL + 1 : _                                   ' KG041103
  5108.                Ara(WasL,1) = 372! * (VAL(Year$) - 80!) + 31! * VAL(WasMM$) + VAL(WasDD$) _' KK030901
  5109.             ELSE IF FirstWarning THEN _                              ' KG041103
  5110.                     FirstWarning = ZFalse : _                        ' KG041103
  5111.                     ZWasZ$ = "Invalid FMS format " + ZFMSDirectory$ : _ ' KG041103
  5112.                     CALL PScrn (ZWasZ$) : _                          ' KG041103
  5113.                     CALL UpdtCalr (ZWasZ$,2)                         ' KG041103
  5114.          IF NOT ZCanDnldFromUp THEN _
  5115.             WasX = ZMinSecToView _
  5116.          ELSE IF Category$ = "***" THEN _
  5117.                  WasX = ZSysopSecLevel _
  5118.               ELSE IF Category$ = ZDefaultCatCode$ THEN _
  5119.                       WasX = ZMinSecToView _
  5120.               ELSE IF LEFT$(PreDate$,1) = "=" THEN _                 ' KG071001
  5121.                       CALL CheckInt (Desc$) : _                      ' KG071001
  5122.                       WasX = ZTestedIntValue _                       ' KG071001
  5123.               ELSE WasX = ZOptSec(19)                                ' KG071001
  5124.          Ara(WasL,2) = WasX
  5125.  
  5126. ------------------------[ KG070901 ]-------------------------
  5127.  
  5128. Problem:  RBBS is supposed to support stacked command everywhere.
  5129. Cases not working include "q u c", "5 M F".   Many commands inside
  5130. sysop function 5 did not support stacking.
  5131.  
  5132. Change RBBS-PC.BAS as follows:
  5133.  
  5134. 11001 ZStopInterrupts = ZTrue
  5135.       WasI = 1
  5136.       ScanUsers = ZFalse
  5137.       IF EditFromRead = 1 THEN GOTO 11341                            ' KG070901
  5138.       ZOutTxt$ = "A)dd, L)st, P)rt, M)od, S)can users"
  5139.       GOSUB 12930                                                    ' KG070901
  5140. 11003 IF ZWasQ = 0 THEN _
  5141.       IF EditFromRead > 0 THEN _
  5142.          GOTO 11325 _
  5143.       ELSE _
  5144.          ZUserFileIndex = WasTU : _
  5145.          GOTO 20093
  5146.       WasQQ = 0
  5147.       ZWasZ$ = LEFT$(ZUserIn$(ZAnsIndex),1)                          ' KG070901
  5148.       CALL AllCaps (ZWasZ$)
  5149.       IF ZWasZ$ = "A" THEN _
  5150.          GOTO 12300 _
  5151.       ELSE IF ZWasZ$ = "M" THEN _
  5152.               ZStopInterrupts = ZTrue _
  5153.            ELSE IF ZWasZ$ = "P" THEN _
  5154.                    WasQQ = ZTrue _
  5155.                 ELSE IF ZWasZ$ = "S" THEN _
  5156.                         ScanUsers = ZTrue : _
  5157.                         ZStopInterrupts = ZTrue _
  5158.                      ELSE IF ZWasZ$ <> "L" THEN _
  5159.                              GOTO 11001
  5160. 11005 CALL OpenUser (HighestUserRecord)
  5161.       GOSUB 9450
  5162.       WasZ = 1
  5163.       IF ScanUsers THEN _
  5164.          ZOutTxt$ = "Scan for N)ame, P)wd, C)" + ZUserLocation$ + ", L)evel" + _
  5165.               LEFT$(", H)ash id",-9*(ZStartHash > 1 AND ZLenHash > 0)) : _
  5166.          GOSUB 12930 : _                                             ' KG070901
  5167.          ZOutTxt$ = "" : _
  5168.          ScanFunction$ = LEFT$(ZUserIn$(1),1) : _
  5169.          CALL AllCaps (ScanFunction$) : _
  5170.          ZCR = 0 : _
  5171.          GOSUB 12979 : _
  5172.          GOSUB 12966 : _
  5173.          GOTO 12962
  5174.  
  5175. 11110   ZOutTxt$ = "D)el,F)ind,M)enu,N)ewPW,P)rnt,R)eset gr,Q)uit,S)ecLvl,U)ser#,X)fer"
  5176.         IF ZRestrictByDate THEN _
  5177.            ZOutTxt$ = ZOutTxt$ + _
  5178.                 ",$)RegDate"
  5179.         GOSUB 12930                                                  ' KG070901
  5180.         IF NOT ScanUsers AND ZWasQ = 0 THEN _
  5181.            GOTO 11310
  5182. 11115   ZWasZ$ = LEFT$(ZUserIn$(ZAnsIndex),1)                        ' KG070901
  5183.         CALL AllCaps (ZWasZ$)
  5184.         WasX = INSTR("DNPQFSMR$UX",ZWasZ$)
  5185.         IF ZWasZ$ = "" AND ScanUsers THEN _
  5186.            GOTO 12965
  5187.         ON WasX GOTO 11130,11160,11220,11320,11340,11390,11330,11400,11450,11127,11490
  5188.         GOTO 11110
  5189.  
  5190. 11127   ZOutTxt$ = "What record #"
  5191.         GOSUB 12932                                                  ' KG070901
  5192.         GOTO 11125
  5193.  
  5194. 11340 ZOutTxt$ = ZPromptHash$ + _
  5195.            " to find"
  5196.       CALL SkipLine (1)
  5197.       ZParseOff = ZTrue                                              ' KG070901
  5198.       GOSUB 12932                                                    ' KG070901
  5199.       IF ZWasQ = 0 THEN _
  5200.          GOTO 11340
  5201.       TempHashValue$ = ZUserIn$
  5202.  
  5203. 11395 ZOutTxt$ = "New sec level"
  5204.       GOSUB 12932                                                    ' KG070901
  5205.       ZWasZ$ = ZUserIn$(ZAnsIndex)                                   ' KG070901
  5206.       WasOF = VAL(ZWasZ$)
  5207.       IF WasOF > ZUserSecLevel THEN _
  5208.          WasOF = ZUserSecLevel
  5209.       RETURN
  5210.  
  5211. 11450 ZOutTxt$ = "Enter new registration date (MM-DD-YY)"
  5212.       GOSUB 12932                                                    ' KG070901
  5213.       IF ZWasQ = 0 THEN _
  5214.          GOTO 11015
  5215. 11455 WorkDate$ = ZUserIn$(ZAnsIndex)                                ' KG070901
  5216.       IF LEN(WorkDate$) < 8 THEN _
  5217.          GOTO 11450
  5218.       GOSUB 11470
  5219.       IF NOT ZOK THEN _
  5220.          GOTO 11450
  5221.       LSET ZUserOption$ = LEFT$(ZUserOption$,10) + _
  5222.                            ZRegDate$ + _
  5223.                            MID$(ZUserOption$,13)
  5224.       GOSUB 11480
  5225.       ZRegDate$ = RegDateHold$
  5226.       GOTO 11290
  5227.  
  5228. Change RBBSSUB2.BAS as follows:
  5229.  
  5230. 1651 IF ZAnsIndex < ZLastIndex THEN _
  5231.         ZAnsIndex = ZAnsIndex + 1 : _
  5232.         ZUserIn$ = ZUserIn$(ZAnsIndex) : _
  5233.         IF MID$(ZLastCommand$,2,1) <> " " AND (NOT ZStackC) AND ZAnsIndex > 1 AND INSTR("Cc",ZUserIn$) > 0 AND LEN(ZUserIn$) = 1 THEN _ ' KG070901
  5234.            GOTO 1651 _
  5235.         ELSE ZSubParm = 3 : _
  5236.              CALL TGet : _
  5237.              GOTO 1652
  5238.      ZLastIndex = 0
  5239.      ZAnsIndex = 1
  5240.      ZSubParm = 1
  5241.      ZSearchingAll = ZFalse
  5242.      CALL TGet
  5243.      ZLastIndex = ZWasQ
  5244.  
  5245. ------------------------[ KG070601 ]-------------------------
  5246.  
  5247. Problem:   When log on before midnight, but join a subboard after
  5248. midnight, the date last logged on in the main users file would have
  5249. the later date sometimes, such as when rejoined main.   This caused
  5250. people not to get a new allotment of time when they called back the
  5251. next day.   Also, the time recorded in the user's file for a conference
  5252. was always the orginal time logged on rather than the actual time the
  5253. conference was entered.
  5254.  
  5255. Add the following variables to RBBS-VAR.BAS:  ZOrigTimeLoggedOn$,
  5256. ZOrigDateTimeOn$
  5257.  
  5258. Change RBBS-PC.BAS as follows:
  5259.  
  5260. 815 ZDnlds = CVI(ZUserDnlds$)
  5261.     ZUplds = CVI(ZUserUplds$)
  5262.     IF ZEnforceRatios THEN _
  5263.        ZDLToday! = CVS(ZTodayDl$) : _
  5264.        ZBytesToday! = CVS(ZTodayBytes$) : _
  5265.        ZDLBytes! = CVS(ZDlBytes$) : _
  5266.        ZULBytes! = CVS(ZULBytes$)
  5267.     IF ZCurDate$ <> LEFT$(ZLastDateTimeOnSave$,8) THEN  _
  5268.        ZDLToday! = 0 : _
  5269.        ZBytesToday! = 0
  5270.     IF NOT GlobalsSet THEN _
  5271.        GlobalsSet = ZTrue : _
  5272.        ZGlobalDnlds = ZDnlds : _
  5273.        ZGlobalUplds = ZUplds : _
  5274.        ZGlobalDLToday! = ZDLToday! : _
  5275.        ZGlobalBytesToday! = ZBytesToday! : _
  5276.        ZGlobalDLBytes! = ZDLBytes! : _
  5277.        ZGlobalULBytes! = ZULBytes!
  5278.     'IF ZRatioRestrict# > 0 AND ZEnforceRatios THEN _
  5279.     '   IF ZByteMethod = 0 AND ZUplds < ZInitialCredit# THEN _
  5280.     '      ZUplds = ZInitialCredit# _
  5281.     '   ELSE IF ZByteMethod = 1 AND ZULBytes! < ZInitialCredit# THEN _
  5282.     '           ZULBytes! = ZInitialCredit#
  5283.     GOSUB 827
  5284.     LSET ZUserOption$ = MKI$(ZTimesLoggedOn) + _
  5285.                          MID$(ZUserOption$,3)
  5286.     LSET ZLastDateTimeOn$ = ZCurDate$ + _
  5287.                               " " + _
  5288.                               ZTimeLoggedOn$
  5289.     MID$(ZUserRecord$,ZStartHash,ZLenHash) = HashValue$
  5290.     IF ZStartIndiv > 0 THEN _
  5291.        MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$       ' RC050901
  5292.     LSET ZUserName$ = ZOrigUserName$
  5293.     IF (NOT ZExitToDoors) AND NOT (ZOrigMsgFile$ = ZActiveMessageFile$ AND SubBoard) THEN _
  5294.        CALL AutoPage
  5295.     IF NOT SubBoard THEN _
  5296.        ZOrigUserFileIndex = ZUserFileIndex
  5297.     IF NOT ZConfMode THEN _                                          ' KG070601
  5298.        IF ZOrigDateTimeOn$ = "" THEN _                               ' KG070601
  5299.           ZOrigDateTimeOn$ = ZLastDateTimeOn$ : _                    ' KG070601
  5300.           ZOrigTimeLoggedOn$ = ZTimeLoggedOn$ _                      ' KG070601
  5301.        ELSE ZLastDateTimeOn$ = ZOrigDateTimeOn$ :                    ' KG070601
  5302.             ZTimeLoggedOn$ = ZOrigTimeLoggedOn$                      ' KG070601
  5303.     GOSUB 9440
  5304.     GOSUB 12991
  5305.     CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)
  5306.     IF TurboLogon THEN _
  5307.        GOTO 819
  5308.     IF SkipWelcomeScreen AND _
  5309.        (ZUserSecLevel >= ZAllowCallerTurbo) THEN _
  5310.        GOTO 816
  5311.     IF NOT SameUser THEN _
  5312.        ZStopInterrupts = NOT ZWelcomeInterruptable : _
  5313.        ZBypassTimeCheck = ZTrue : _
  5314.        ZFileName$ = ZWelcomeFile$ : _
  5315.        ZDisplayAsUnit = ZTrue : _
  5316.        GOSUB 1790 : _
  5317.        ZDisplayAsUnit = ZFalse
  5318.     ZBypassTimeCheck = ZFalse
  5319.     ZStopInterrupts = ZTrue
  5320.  
  5321. 5348 GOSUB 12987
  5322.      GOSUB 12990
  5323.      IF SubBoard THEN _
  5324.         ZHasDoored = ZFalse : _
  5325.         ZActiveFMSDir$ = "" : _
  5326.         ZTimeLoggedOn$ = TIME$ : _                                   ' KG070601
  5327.         RETURN 108
  5328.      GOSUB 827
  5329.      IF UpdateDate THEN _
  5330.         BoardCheckDate$ = ZLastDateTimeOn$ : _
  5331.         ZTimeLoggedOn$ = TIME$ : _                                   ' KG070601
  5332.         LSET ZLastDateTimeOn$ = ZCurDate$ + _
  5333.                                   " " + _
  5334.                                   ZTimeLoggedOn$ : _
  5335.         GOSUB 9440 : _
  5336.         GOSUB 12991
  5337.      IF PrevUSL <> ZUserSecLevel THEN _
  5338.         CALL SetPrompt
  5339.      GOSUB 1241
  5340.      RETURN 852
  5341.  
  5342. Change RBBSSUB2.BAS as follows:
  5343.  
  5344. 10602 ZSubParm = 6
  5345.       ZWasY$ = ZLastDateTimeOn$                                      ' KG070601
  5346.       CALL FileLock
  5347.       CALL OpenUser (HighestUserRecord)
  5348.       FIELD 5,31 AS ZUserName$, _
  5349.               15 AS ZPswd$, _
  5350.                2 AS ZSecLevel$, _
  5351.               14 AS ZUserOption$,  _
  5352.               24 AS ZCityState$, _
  5353.               3 AS MachineType$, _
  5354.               4 AS ZTodayDl$, _
  5355.               4 AS ZTodayBytes$, _
  5356.               4 AS ZDlBytes$, _
  5357.               4 AS ZULBytes$, _
  5358.               14 AS ZLastDateTimeOn$, _
  5359.                3 AS ZListNewDate$, _
  5360.                2 AS ZUserDnlds$, _
  5361.                2 AS ZUserUplds$, _
  5362.                2 AS ZElapsedTime$
  5363. 10604 GET 5,ZUserFileIndex
  5364.       LSET ZLastDateTimeOn$ = ZWasY$                                 ' KG070601
  5365.       IF UpdateDefaults THEN _
  5366.          CALL DefaultU
  5367.       IF ZListDir THEN _
  5368.          LSET ZListNewDate$ = CHR$(VAL(MID$(ZCurDate$,7,2))) + _
  5369.                                CHR$(VAL(MID$(ZCurDate$,1,2))) + _
  5370.                                CHR$(VAL(MID$(ZCurDate$,4,2)))
  5371. 10605 LSET ZUserDnlds$ = MKI$(ZDnlds)
  5372.       LSET ZUserUplds$ = MKI$(ZUplds)
  5373.       IF ZEnforceRatios THEN _
  5374.          LSET ZTodayDl$ = MKS$(ZDLToday!) : _
  5375.          LSET ZTodayBytes$ = MKS$(ZBytesToday!) : _
  5376.          LSET ZDlBytes$ = MKS$(ZDLBytes!) : _
  5377.          LSET ZULBytes$ = MKS$(ZULBytes!)
  5378.       CALL CheckTime (ZUserLogonTime!, ZSecsUsedSession!, 2)
  5379.       IF (NOT ZExitToDoors) AND LoggingOff THEN _
  5380.          TempElapsed! = ZElapsedTime + _
  5381.                        (ZSecsUsedSession! - ZTimeCredits!) / 60 : _
  5382.          ZTimeCredits! = 0 _
  5383.       ELSE TempElapsed! = ZElapsedTime
  5384.       IF TempElapsed! < -32767 THEN _
  5385.          TempElapsed! = -32767 _
  5386.       ELSE IF TempElapsed! > 32767 THEN _
  5387.          TempElapsed! = 32767
  5388.       LSET ZElapsedTime$ = MKI$(TempElapsed!)
  5389.       IF ZAdjustedSecurity THEN _
  5390.          LSET ZSecLevel$ = MKI$(ZUserSecLevel)
  5391.       PUT 5,ZUserFileIndex
  5392.       ZSubParm = 8
  5393.       CALL FileLock
  5394.       IF ZActiveUserFile$ <> ZOrigUserFile$ AND LoggingOff THEN _
  5395.          ZActiveUserFile$ = ZOrigUserFile$ : _
  5396.          ZUserFileIndex = ZOrigUserFileIndex : _
  5397.          UpdateDefaults = ZFalse : _
  5398.          LSET ZLastDateTimeOn$ = ZOrigDateTimeOn$ : _                ' KG070601
  5399.          GOTO 10602
  5400.  
  5401. Change RBBSSUB3.BAS as follows:
  5402.  
  5403. 43070 ZActiveMessageFile$ = ZOrigMsgFile$
  5404.       ZSubParm = 3
  5405.       CALL FileLock
  5406.       CALL OpenMsg
  5407.       FIELD 1, 128 AS ZMsgRec$
  5408.       GET 1,ZNodeRecIndex
  5409.       IF ZGlobalSysop THEN _
  5410.          MID$(ZMsgRec$,1,30) = "SYSOP" + SPACE$(25)
  5411.       MID$(ZMsgRec$,40,2) = STR$(ZExitToDoors)
  5412.       MID$(ZMsgRec$,42,2) = STR$(ZEightBit)
  5413.       MID$(ZMsgRec$,44,2) = STR$(ZBPS)
  5414.       MID$(ZMsgRec$,46,2) = STR$(ZUpperCase)
  5415.       MID$(ZMsgRec$,48,5) = MKS$(ZNumDnldBytes!) + MID$(STR$(-ZBatchTransfer),2) ' KG022101
  5416.       MID$(ZMsgRec$,53,2) = STR$(ZWasGR)
  5417.       MID$(ZMsgRec$,55,2) = STR$(ZSysop)
  5418.       MID$(ZMsgRec$,65,3) = CHR$(VAL(LEFT$(ZTimeLoggedOn$,2))) + _
  5419.                                    CHR$(VAL(MID$(ZTimeLoggedOn$,4,2))) + _
  5420.                                    CHR$(VAL(MID$(ZTimeLoggedOn$,7,2)))
  5421.       MID$(ZMsgRec$,72,2) = STR$(ZPrivateDoor)
  5422.       MID$(ZMsgRec$,74,1) = MID$(STR$(ZTransferFunction),2,1)
  5423.       MID$(ZMsgRec$,75,1) = ZWasFT$
  5424.       MID$(ZMsgRec$,113,2) = MKI$(CINT(ZTimeCredits!)/60)
  5425.       MID$(ZMsgRec$,79,8) = LEFT$(ZDooredTo$+"        ",8)
  5426.       MID$(ZMsgRec$,91,2) = STR$(ZReliableMode)
  5427.       CALL BreakFileName (ZCurPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZFalse)
  5428.       MID$(ZMsgRec$,93,8) = ZUserIn$ + SPACE$(8 - LEN(ZUserIn$))
  5429.       IF ZLocalUser THEN _
  5430.          ZWasZ$ = ZCarriageReturn$ + ZCarriageReturn$ _              ' KG030601
  5431.       ELSE ZWasZ$ = " 0"                                             ' KG030601
  5432.       MID$(ZMsgRec$,101,2) = ZWasZ$                                  ' KG030601
  5433.       MID$(ZMsgRec$,103,2) = STR$(ZLocalUserMode)                    ' KG030601
  5434.       ZConfName$ = LEFT$(ZConfName$,INSTR(ZConfName$ + " "," ") - 1)
  5435.       MID$(ZMsgRec$,105,8) = ZConfName$ + SPACE$(8 - LEN(ZConfName$))
  5436.       MID$(ZMsgRec$,115,1) = MID$(STR$(ZAutoLogoffReq),2,1)
  5437.       MID$(ZMsgRec$,117,2) = STR$(ZMenuIndex)
  5438.       MID$(ZMsgRec$,119,2) = LEFT$(DATE$,2)
  5439.       MID$(ZMsgRec$,121,2) = MID$(DATE$,4,2)
  5440.       MID$(ZMsgRec$,123,2) = RIGHT$(DATE$,2)
  5441.       MID$(ZMsgRec$,125,2) = LEFT$(TIME$,2)
  5442.       MID$(ZMsgRec$,127,2) = MID$(TIME$,4,2)
  5443. ' ***   Save additional parameters for door restoral
  5444.       CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
  5445.       CALL PrintWorkA (STR$(ZLimitMinsPerSession))
  5446.       CALL PrintWorkA (ZWasNG$)                                      ' KG052701
  5447.       CALL PrintWorkA (ZIndivValue$)                                 ' NC050901
  5448.       CALL PrintWorkA (ZOrigDateTimeOn$)                             ' KG070601
  5449.       CALL PrintWorkA (ZOrigTimeLoggedOn$)                           ' KG070601
  5450.       CLOSE 2
  5451.  
  5452. 44003 ZUserLogonTime! = VAL(HourLoggedOn$) * 3600! + _               ' KK030901
  5453.                         VAL(MinLoggedOn$) * 60! + _                  ' KK030901
  5454.                         VAL(SecLoggedOn$)
  5455.       HourLoggedOn$ = ""
  5456.       MinLoggedOn$ = ""
  5457.       SecLoggedOn$ = ""
  5458.       IF ZMinsPerSession < 1 THEN _
  5459.          ZMinsPerSession = 3
  5460.       IF NOT ZEightBit THEN _
  5461.          OUT ZLineCntlReg,&H1A
  5462.       IF LEFT$(ZMsgRec$,7) = "SYSOP  " THEN _
  5463.          ZFirstName$ = ZSysopPswd1$ : _
  5464.          ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
  5465.       ELSE ZFirstNameEnd = INSTR(ZMsgRec$," ") : _
  5466.            ZLastNameEnd = INSTR(ZFirstNameEnd + 1,ZMsgRec$ + " ","  ") : _
  5467.            ZFirstName$ = LEFT$(ZMsgRec$,ZFirstNameEnd-1) : _
  5468.            ZLastName$ = MID$(ZMsgRec$,ZFirstNameEnd + 1,ZLastNameEnd - (ZFirstNameEnd + 1)) : _
  5469.            ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
  5470.       ZWasZ$ = ZFirstName$
  5471.       CALL OpenWork (2,ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
  5472.       CALL ReadDir (2,1)
  5473.       ZLimitMinsPerSession = VAL (ZOutTxt$)
  5474.       CALL ReadDir (2,1)                                             ' KG052701
  5475.       ZWasNG$ = ZOutTxt$                                             ' KG052701
  5476.       CALL ReadDir (2,1)                                             ' RC050901
  5477.       ZIndivValue$ = ZOutTxt$                                        ' RC050901
  5478.       CALL ReadDir (2,1)                                             ' KG070601
  5479.       ZOrigDateTimeOn$ = ZOutTxt$                                    ' KG070601
  5480.       CALL ReadDir (2,1)                                             ' KG070601
  5481.       ZOrigTimeLoggedOn$ = ZOutTxt$                                  ' KG070601
  5482.       CLOSE 2
  5483.       END SUB
  5484.  
  5485. ------------------------[ KG062303 ]-------------------------
  5486.  
  5487. Problem:  The page header in conference mode is saying conference
  5488. is private based on whether there is a user file.   This is a holdover
  5489. from earlier version.   Conferences with user files can be public.
  5490. Also, header should use name of conference rather than DOS name of
  5491. message file.
  5492.  
  5493. Solution:  Omit whether public/private.   Change CONFIG.BAS as follows:
  5494.  
  5495. 24970 LOCATE 2,1
  5496.       PRINT SPACE$(10)
  5497.       LOCATE 2,10                                                    ' KG062303
  5498.       COLOR 31,0,0
  5499.       PRINT "(Conference Maintenance Mode for " + _                  ' KG062303
  5500.             ZConfName$ + _                                           ' KG062303
  5501.             ")";                                                     ' KG062303
  5502.       RETURN
  5503. '
  5504. ' * COMMON SUBROUTINE TO DISPLAY ACTIVITY WHEN PACKING/PURGING FILES
  5505. '
  5506.  
  5507. Change CNFG-SUB.BAS as follows:
  5508.  
  5509. 24970 LOCATE 2,1
  5510.       PRINT SPACE$(10)
  5511.       LOCATE 2,10                                                    ' KG062303
  5512.       PRINT "(Conference Maintenance Mode for " + _                  ' KG062303
  5513.             ZConfName$ + _                                           ' KG062303
  5514.             ")";
  5515.       RETURN
  5516. '
  5517. ' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD
  5518. '
  5519.  
  5520. ------------------------[ KG062302 ]-------------------------
  5521.  
  5522. Problem:  When in conference mode, can be unclear what user/message
  5523. file currently working on.
  5524.  
  5525. Solution:  Add the name of the conference to the text for the
  5526. user and message file names.
  5527.  
  5528. Add the following variables to CNFG-VAR.BAS:  ZConfName$ and MAINMSG$
  5529.  
  5530. Change CONFIG.BAS as follows:
  5531.  
  5532. 25050 CALL ASKRO ("Enter the name of the conference (7 characters or less) ",24,HJ$)
  5533.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 7 THEN _
  5534.          GOTO 25040
  5535.       CALL ALLCAPS (HJ$)
  5536.       ZConfName$ = HJ$                                               ' KG062302
  5537.       CP$ = HJ$
  5538.  
  5539. Change CNFG-SUB.BAS as follows:
  5540.  
  5541. 12470 DISPLAYED.PAGE.NUMBER = 9
  5542.       GOSUB 30040
  5543.       ' MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  5544.       MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
  5545.       MAX.ALLOWED.MSGS.FRM.DEF  = MAXIMUM.NUMBER.OF.MSGS
  5546.       GOSUB 24800
  5547.       LOCATE  3,1
  5548.       PRINT "161. Maximum number of concurrent RBBS-PC's  -------" + STR$(MAXIMUM.NUMBER.OF.NODES)
  5549.       MT$ = "single RBBS-PC copy "
  5550.       IF MAXIMUM.NUMBER.OF.NODES <> 1 THEN _
  5551.          MT$ = "concurrent RBBS-PC's" : _
  5552.          SUBROUTINE.PARAMETER = 2 : _
  5553.          IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 7 THEN _
  5554.             SUBROUTINE.PARAMETER = 1 : _
  5555.             CALL NETTYPE : _
  5556.          ELSE CALL NETTYPE
  5557.       IF NETWORK.TYPE = 6 THEN _
  5558.          MT$ = "NETBIOS             "
  5559.       IF NETWORK.TYPE = 7 THEN _
  5560.          MT$ = "DoubleDOS           "
  5561.       PRINT "162. Environment running " + MT$ + " ------ " + NETWORK.TYPE$
  5562.       PRINT "163. RBBS-PC 'recycle' method when users log off --- " + RECYCLE.TO.DOS$
  5563.       FILE$ = MAIN.MESSAGE.FILE$
  5564.       GOSUB 30180
  5565.       MAX.MSG.FILE.SIZE.FRM.DEF! = UG
  5566.       IF CONFERENCE.MODE <> 1 THEN _                                 ' KG062302
  5567.          X$ = "MAIN" _                                               ' KG062302
  5568.       ELSE X$ = ZConfName$                                           ' KG062302
  5569.       PRINT "164. Number of records in " ;X$;" User File ";STRING$(15-LEN(X$),"-");STR$(MAX.USR.FILE.SIZE.FRM.DEF) ' KG062302
  5570.       IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _                        ' KG062302
  5571.          X$ = "MAIN" _                                               ' KG062302
  5572.       ELSE X$ = ZConfName$                                           ' KG062302
  5573.       PRINT "165. Number of records in " ;X$;" Message File ";STRING$(12-LEN(X$),"-");STR$(MAX.MSG.FILE.SIZE.FRM.DEF!) ' KG062302
  5574.       PRINT "166. Maximum number of messages allowed ------------" ; STR$(MAX.ALLOWED.MSGS.FRM.DEF) ' KG062302
  5575.       PRINT "167. Conference File Maintenance."
  5576.       PRINT "168. Default extension for compressed files -------- " ; DEFAULT.EXTENSION$
  5577.       PRINT "169. Additional extensions for compressed files ---- " ; COMPRESSED.EXT$
  5578.       PRINT "170. Message file GROWS in size as messages added -- " ; FNYESNO$(MESSAGES.CAN.GROW)
  5579.       GOTO 12580
  5580.  
  5581. ------------------------[ KG062301 ]-------------------------
  5582.  
  5583. Problem:  Value of config parameter on auto-add security does not
  5584. have a space separating it from the text.
  5585.  
  5586. Change CNFG-SUB.BAS as follows:
  5587.  
  5588. 12466 DISPLAYED.PAGE.NUMBER = 8
  5589.       GOSUB 24800
  5590.       LOCATE  3,1
  5591.       PRINT "141. Call-back verification ----------------------- " + NOT.YET.IN$ ' CALLBACK.VERIFICATION$
  5592.       PRINT "142. Drive/path where personal files & dir stored - " + PERSONAL.DRVPATH$
  5593.       PRINT "143. Name of Personal Directory ------------------- " + PERSONAL.DIR$
  5594.       PRINT "144. Protocol required for personal downloads ----- " + MID$("<other><none> Ascii  XMODEM Xm/CRC Kermit Ymodem Imodem YmodemGWxmodem", 7 * INSTR("NAXCKYIGW",PERSONAL.PROTOCOL$) + 1,7)  ' EC060601
  5595.       PRINT "145. Files with download security are listed in --- " + FILESEC.FILE$
  5596.       PRINT "146. File name with privileged group passwords is - " + PASSWORD.FILE$
  5597.       PRINT "147. Concatenate multi-file ASCII downloads ------- " + FNYESNO$(PERSONAL.CONCAT)
  5598.       PRINT "148. Min SECURITY to CATEGORIZE uploads -----------" + STR$(SL.CATEGORIZE.UPLOADS)
  5599.       PRINT "149. Min security level to view new uploads -------" + STR$(MIN.SEC.TO.VIEW)
  5600.       PRINT "150. Security level exempt from 'epi-log' file ----" + STR$(SECURITY.EXEMPT.FROM.EPILOG)
  5601.       PRINT "151. Min. security to 'AUTO ADD' conference user -- " + AUTO.ADD.SECURITY$ ' KG062301
  5602.       PRINT "152. Min. security for old caller to turbo logon --" + STR$(ALLOW.CALLER.TURBO)
  5603.       PRINT "153. Min. security to describe an existing file ---" + STR$(ADD.DIR.SECURITY)
  5604.       PRINT "154. Help file to display for a security violation- " + SECVIO.HLP$
  5605.       TIME.LOCK$ = MID$("<none> DOORS  DOWNLDSBOTH   ",TIME.LOCK*7+1,7)
  5606.       PRINT "155. Time lock on DOORS and DOWNLOADS ------------- "; TIME.LOCK$
  5607.       PRINT "156. Min. sec level exempt from auto-update of sec-" ; AUTO.UPGRADE.SEC
  5608.       PRINT "157. Min security to READ & KILL all messages -----" ; SEC.KILL.ANY
  5609.       PRINT "158. Do not display lines in msgs beginning with -- "; SCREEN.OUT.MSG$ ' KG041101
  5610.       GOTO 12580
  5611.  
  5612. ------------------------[ DA061001 ]-------------------------
  5613.  
  5614. Problem: When CONFIG creates a message base, it sets the LAST
  5615. message number in the checkpoint to 1.  This should be 0.  To
  5616. kludge around this, RBBS-PC.BAS checks for an empty message base,
  5617. and forces the first message to 1.   This would allow multi-node
  5618. systems to get duplicate message 1's.
  5619.  
  5620. Solution:  Change RBBS-PC.BAS as follows:
  5621.  
  5622. 3405 GOSUB 4910
  5623.      MsgRecSave$ = ZMsgRec$
  5624.      MsgCorrected = ZFalse
  5625.      GOSUB 23100
  5626.      ZOutTxt$ = "Adding new msg #" + _
  5627.           STR$(HighMsgNumber + 1)
  5628.      IF NOT ZLocalUser THEN _
  5629.         CALL UpdtCalr (ZOutTxt$,1)
  5630.      GOSUB 12978
  5631.      ZWasSL = 0
  5632.      ZWasN$ = ""
  5633.      ZLastIndex = 0
  5634.      HighMsgNumber = HighMsgNumber + 1                               ' DA061001
  5635.  
  5636. Solution:  Change CONFIG.BAS as follows:
  5637.  
  5638. 31040 LSET RR$ = " 0      " + _               ' NUMBER OF LAST MESSAGE  ' DA061001
  5639.                  MKI$(0) + _                  ' SECURITY LEVEL TO AUTO-ADD USER
  5640.                  SPACE$(116) + _              ' BLANKS IN ALL OTHER FIELDS
  5641.                  RIGHT$("0"+MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2),2)
  5642.       RETURN
  5643. '
  5644. ' * COMMON SUBROUTINE TO CREATE A BLANK "NODE" RECORD IN THE MESSAGE FILE
  5645. '
  5646.  
  5647. ------------------------[ DA061002 ]-------------------------
  5648.  
  5649. Problem: When RBBS-PC is displaying a text file, and the user presses a
  5650. key, Smart Text translation stops.
  5651.  
  5652. Solution: Change RBBSSUB4.BAS as follows:
  5653.  
  5654. 58301 CRat = INSTR(StartByte,Strng$,ZCarriageReturn$)
  5655.       IF CRat > 0 AND CRat < WasL THEN _
  5656.          CRFound = (MID$(Strng$,CRat + 1,1) = ZLineFeed$) _
  5657.       ELSE CRFound = ZFalse
  5658.       EOLlen = -2 * CRFound
  5659.       IF CRFound THEN _
  5660.          EOD = CRat _
  5661.       ELSE EOD = WasL + 1
  5662.       NumBytes = EOD - StartByte
  5663.       StringWork$ = MID$(Strng$,StartByte,NumBytes)
  5664.       IF NOT ZDeleteInvalid THEN _
  5665.          GOTO 58302                                                  ' DA061002
  5666.       Index = INSTR(StringWork$,"[")
  5667.       WasJ = LEN(StringWork$) - 1
  5668.       WHILE Index > 0 AND Index < WasJ
  5669.          IF MID$(StringWork$,Index + 2,1) = "]" THEN _
  5670.             IF INSTR (ZInvalidOpts$,MID$(StringWork$,Index + 1,1)) THEN _
  5671.                MID$(StringWork$,Index + 1,1) = "*"
  5672.          Index = INSTR(Index + 1,StringWork$,"[")
  5673.       WEND
  5674. 58302 IF ZJumpSearching THEN _                                       ' DA061002
  5675.          Temp$ = StringWork$ : _
  5676.          CALL AllCaps (Temp$) : _
  5677.          HiLitePos = INSTR (Temp$,ZJumpTo$) : _
  5678.          IF HiLitePos = 0 THEN _
  5679.             GOTO 58307 _
  5680.          ELSE CALL Bracket (StringWork$,HiLitePos,HiLitePos+LEN(ZJumpTo$)-1,ZEmphasizeOn$,ZEmphasizeOff$) : _
  5681.               ZJumpSearching = ZFalse
  5682.       IF ZSmartTextCode THEN _
  5683.          CALL SmartText (StringWork$, CRFound, ZFalse)
  5684.       IF NOT ZLocalUser THEN _                                       ' DA061002
  5685.          CALL EofComm (Char) : _                                     ' DA061002
  5686.          IF Char <> -1 THEN _                                        ' DA061002
  5687.             GOTO 58303            ' comm port input                  ' DA061002
  5688.       ZKeyboardStack$ = INKEY$ : _                                   ' DA061002
  5689.       IF ZKeyboardStack$ <> "" THEN _  ' keyboard input              ' DA061002
  5690.          GOTO 58303                                                  ' DA061002
  5691.       CALL QuickTPut (StringWork$, - (CRFound))                      ' DA061002
  5692.       GOTO 58304                                                     ' DA061002
  5693. 58303 ZOutTxt$ = StringWork$                                         ' DA061002
  5694.       ZSubParm = 4                                                   ' DA061002
  5695.       IF CRFound THEN ZSubParm = 5                                   ' DA061002
  5696.       CALL TPut                                                      ' DA061002
  5697. 58304 IF ZRet THEN _                                                 ' DA061002
  5698.          EXIT SUB
  5699.       IF ZLinesPrinted < ZFF THEN _
  5700.          GOTO 58307
  5701.  
  5702. 58405 WasTU = WasTU + 1
  5703.       IF WasTU < NumRecs THEN _
  5704.          GET 2,WasTU _
  5705.       ELSE IF WasTU = NumRecs THEN _
  5706.               GET 2,WasTU : _
  5707.               WasX = INSTR(SeqRec$,CHR$(26)) : _
  5708.               IF WasX = 0 OR WasX > LenLastRec THEN _
  5709.                  DataSize = LenLastRec _
  5710.               ELSE DataSize = WasX - 1 _
  5711.            ELSE GOTO 58419
  5712.       CALL BufString (SeqRec$,DataSize,AbortIndex)                   ' DA061002
  5713.  
  5714. Omit lines 58406 and 58407.
  5715.  
  5716. ------------------------[ DA060901 ]-------------------------
  5717.  
  5718. Problem:  I filetered out the TAB character in the RBBS line editor
  5719. years ago.  Thanks to suggestions (and CODE SAMPLES!) from Tim Gage, TAB
  5720. is allowed in the editor, and it does not cause errors as it did in the past.
  5721. Thanks to Tim Gage!
  5722.  
  5723. Solution: Change RBBSSUB2.BAS as follows:
  5724.  
  5725. (line 3700)
  5726.  
  5727.      SUB LineEdit (MsgLine,MaxLen) STATIC
  5728.      TabToSpace = 0                                                  ' DA060901
  5729.      LSET ZLineMes$ = ZOutTxt$(MsgLine)
  5730.      Col = LEN(ZOutTxt$(MsgLine))
  5731.      ZStopInterrupts = ZTrue
  5732.      WasXXX = MaxLen - 3
  5733.      ZWaitExpired = ZFalse
  5734.      GOTO 3782
  5735.  
  5736. 3730 IF TabToSpace > 0 THEN _                                        ' DA060901
  5737.         WasX$ = " " : _                                              ' DA060901
  5738.         TabToSpace = TabToSpace - 1 : _                              ' DA060901
  5739.         GOTO 3750                                                    ' DA060901
  5740.      CALL FindFKey                                                   ' DA060901
  5741.      IF ZSubParm < 0 THEN _
  5742.         EXIT SUB
  5743.      WasX$ = ZKeyPressed$
  5744.      IF WasX$ = "" THEN _
  5745.         IF ZLocalUser THEN _
  5746.            GOTO 3730 _
  5747.         ELSE GOTO 3732
  5748.      IF WasX$ = ZEscape$ THEN _
  5749.         ZKeyPressed$ = WasX$ : _
  5750.         EXIT SUB
  5751.      SendRemote = ZTrue
  5752.      WasZ = INSTR(ZLineEditChk$,WasX$)
  5753.      IF WasZ < 1 THEN _
  5754.         GOTO 3750 _
  5755.      ELSE IF WasZ > 4 THEN _
  5756.              GOTO 3870 _                                             ' DA060901
  5757.      ELSE IF WasZ = 1 THEN _                                         ' DA060901
  5758.              GOTO 3810                                               ' DA060901
  5759.      IF ZLocalUser THEN _
  5760.         GOTO 3730
  5761.  
  5762. 3740 ON INSTR(ZLineEditChk$,WasX$) GOTO 3810,3730,3730,3730, _       ' DA060901
  5763.                                    3870,3870,3870,3870,3870          ' DA060901
  5764.  
  5765. 3810 TabToSpace = 5 - (Col MOD 5)                                    ' DA060901
  5766.      GOTO 3730                                                       ' DA060901
  5767.  
  5768. ------------------------[ KG061501 ]-------------------------
  5769.  
  5770. Problem:  When have a timelock on downloads and stack the
  5771. files to download, the file names are misinterpreted as commands.
  5772.  
  5773. Solution:  Change RBBSSUB4.BAS as follows:
  5774.  
  5775. (line 60180)
  5776.  
  5777.       SUB TimeLock STATIC
  5778.       CALL TimeRemain(MinsRemaining)
  5779.       IF ZSecsUsedSession! >= ZTimeLockSet THEN _
  5780.          ZOK = ZTrue : _
  5781.          EXIT SUB
  5782.       ZOutTxt$ = ZFirstName$
  5783.       CALL NameCaps(ZOutTxt$)
  5784.       CALL QuickTPut1 ("Sorry, " + ZOutTxt$ + ", function locked" + _
  5785.                    STR$(INT((ZTimeLockSet-ZSecsUsedSession!)/60)) + _' DA11102
  5786.                    " more minutes" + _
  5787.                    STR$(INT(ZTimeLockSet-ZSecsUsedSession!) MOD 60) + " seconds")
  5788.       CALL BufFile(ZHelpPath$+"TIMELOCK"+ZHelpExtension$,WasX)
  5789.       ZOK = ZFalse
  5790.       ZLastIndex = 0                                                 ' KG061501
  5791.       END SUB
  5792.  
  5793. ------------------------[ EC061301 ]-------------------------
  5794.  
  5795. Problem:  File names not broken correctly into components when they
  5796. contain a period before the extension (e.g. "C:..\RBBS\AX.ZIP").
  5797.  
  5798. Solution:  Change RBBSSUB5.BAS as follows:
  5799.  
  5800. (line 63300)
  5801.  
  5802.       SUB BreakFileName (FileSpec$,DrvPath$,Prefix$,Extension$,ForJoining) STATIC
  5803.       CALL AllCaps (FileSpec$)
  5804.       DrvPath$ = ""
  5805.       Prefix$ = ""
  5806.       Extension$ = ""
  5807.       CALL TrimTrail (FileSpec$,"\")
  5808.       WasL = LEN(FileSpec$)
  5809.       IF WasL < 1 THEN _
  5810.          EXIT SUB
  5811.       CALL FindLast (FileSpec$,"\",WasX,WasY)
  5812.       IF WasX < 1 THEN _
  5813.          IF MID$(FileSpec$,2,1) = ":" THEN _
  5814.             DrvPath$ = LEFT$(FileSpec$,1) : _
  5815.             ZWasS = 3 _
  5816.          ELSE ZWasS = 1 _
  5817.       ELSE DrvPath$ = LEFT$(FileSpec$,WasX-1) : _
  5818.            ZWasS = WasX + 1 : _
  5819.            IF WasY = 1 THEN _
  5820.               DrvPath$ = DrvPath$ + "\"
  5821.       WasX = INSTR(ZWasS,FileSpec$ + ".",".")                        ' EC061301
  5822.       IF WasX < WasL THEN _
  5823.          Extension$ = MID$(FileSpec$,WasX + 1)
  5824.       IF ZWasS <= WasL THEN _
  5825.          IF WasX >= ZWasS THEN _
  5826.             Prefix$ = MID$(FileSpec$,ZWasS,WasX - ZWasS)
  5827.       IF NOT ForJoining THEN _
  5828.          EXIT SUB
  5829.       IF LEN(DrvPath$) = 1 THEN _
  5830.          IF DrvPath$ <> "\" THEN _
  5831.             DrvPath$ = DrvPath$ + _
  5832.                        ":"
  5833.       IF INSTR(DrvPath$,"\") > 0 AND RIGHT$(DrvPath$,1) <> "\" THEN _
  5834.          DrvPath$ = DrvPath$ + _
  5835.                     "\"
  5836.       IF LEN(Extension$) > 0 THEN _
  5837.          Extension$ = "." + _
  5838.                       Extension$
  5839.       END SUB
  5840.  
  5841. ------------------------[ EC060601 ]-------------------------
  5842.  
  5843. Problem:  When set a required protocol for personal downloads in
  5844. configuration, can get illegal function call.
  5845.  
  5846. Solution:  Change CNFG-SUB.BAS as follows:
  5847.  
  5848. 12466 DISPLAYED.PAGE.NUMBER = 8
  5849.       GOSUB 24800
  5850.       LOCATE  3,1
  5851.       PRINT "141. Call-back verification ----------------------- " + NOT.YET.IN$ ' CALLBACK.VERIFICATION$
  5852.       PRINT "142. Drive/path where personal files & dir stored - " + PERSONAL.DRVPATH$
  5853.       PRINT "143. Name of Personal Directory ------------------- " + PERSONAL.DIR$
  5854.       PRINT "144. Protocol required for personal downloads ----- " + MID$("<other><none> Ascii  XMODEM Xm/CRC Kermit Ymodem Im■dem YmodemGWxmodem", 7 * INSTR("NAXCKYIGW",PERSONAL.PROTOCOL$) + 1,7)  ' EC060601
  5855.       PRINT "145. Files with download security are listed in --- " + FILESEC.FILE$
  5856.       PRINT "146. File name with privileged group passwords is - " + PASSWORD.FILE$
  5857.       PRINT "147. Concatenate multi-file ASCII downloads ------- " + FNYESNO$(PERSONAL.CONCAT)
  5858.       PRINT "148. Min SECURITY to CATEGORIZE uploads -----------" + STR$(SL.CATEGORIZE.UPLOADS)
  5859.       PRINT "149. Min security level to view new uploads -------" + STR$(MIN.SEC.TO.VIEW)
  5860.       PRINT "150. Security level exempt from 'epi-log' file ----" + STR$(SECURITY.EXEMPT.FROM.EPILOG)
  5861.       PRINT "151. Min. security to 'AUTO ADD' conference user --" + AUTO.ADD.SECURITY$
  5862.       PRINT "152. Min. security for old caller to turbo logon --" + STR$(ALLOW.CALLER.TURBO)
  5863.       PRINT "153. Min. security to describe an existing file ---" + STR$(ADD.DIR.SECURITY)
  5864.       PRINT "154. Help file to display for a security violation- " + SECVIO.HLP$
  5865.       TIME.LOCK$ = MID$("<none> DOORS  DOWNLDSBOTH   ",TIME.LOCK*7+1,7)
  5866.       PRINT "155. Time lock on DOORS and DOWNLOADS ------------- "; TIME.LOCK$
  5867.       PRINT "156. Min. sec level exempt from auto-update of sec-" ; AUTO.UPGRADE.SEC
  5868.       PRINT "157. Min security to READ & KILL all messages -----" ; SEC.KILL.ANY
  5869.       PRINT "158. Do not display lines in msgs beginning with -- "; SCREEN.OUT.MSG$ ' KG041101
  5870.       PRINT "159. Min. sec level to do personal uploads --------" ; ZMinSecPersUpld ' nc030101
  5871.       PRINT "160. Let messages have multiple recipients -------- " ; FNYESNO$(ZEnableCC) ' nc030101
  5872.       GOTO 12580
  5873.  
  5874. ------------------------[ KG061001 ]-------------------------
  5875.  
  5876. Problem:  When configure RBBS to begin individuation at a column
  5877. greater than 0, and length of individuation to be 0, get an
  5878. error which recover from properly but which is reported as
  5879. an untrapped error requiring attention.   Also, indentation on
  5880. code is misleading and not in accordance with convention elsewhere.
  5881.  
  5882. Solution:  Trap the error.   Change RBBSSUB1.BAS as follows:
  5883.  
  5884. 12600 ZWasY$ = IndivToLookFor$ + SPACE$(LenIndivField - LEN(IndivToLookFor$))
  5885.       PosToReclaim = 0
  5886.       ZErrCode = 0                                                   ' KG061001
  5887. 12610 GET 5,PosToUse
  5888.       IF ZErrCode > 0 THEN _
  5889.          IF ZErrCode = 63 THEN _
  5890.             ZErrCode = 0 : _
  5891.             GOTO 12621 _
  5892.          ELSE ZErrCode = 0 : _
  5893.               GOTO 12620                                             ' KG061001
  5894.       HashValue$ = MID$(Filler$,StartHashPos,LenHashField)
  5895.       IF WasX$ = HashValue$ THEN _
  5896.          IF StartIndivPos < 1 THEN _
  5897.             WhetherFound = ZTrue : _                                 ' KG061001
  5898.             GOTO 12622 _                                             ' KG061001
  5899.          ELSE IndivValue$ = MID$(Filler$,StartIndivPos,LenIndivField) : _
  5900.               IF ZWasY$ = IndivValue$ OR IndivValue$ = EmptyIndiv$ THEN _
  5901.                  WhetherFound = ZTrue : _
  5902.                  GOTO 12622
  5903.       IF HashValue$ = EmptyRec$ THEN _
  5904.          PosToUse = PosToReclaim - (PosToReclaim = 0) * PosToUse : _
  5905.          WhetherFound = ZFalse : _
  5906.          GOTO 12622
  5907.       IF ASC(HashValue$) = 0 OR INSTR(HashValue$,NewUser$) = 1 THEN _
  5908.          IF PosToReclaim = 0 THEN _
  5909.             PosToReclaim = PosToUse
  5910.  
  5911. Change line 65000 as follows:
  5912.  
  5913.        .
  5914.        .
  5915.        .
  5916. '
  5917. '      FindUser ERROR HANDLING
  5918. '
  5919.        IF ERL = 12610 OR ERL = 12600 THEN _                          ' KG061001
  5920.           RESUME NEXT
  5921. '
  5922. '     UpdtCalr ERROR HANDLING
  5923. '
  5924.       .
  5925.       .
  5926.       .
  5927.  
  5928.  
  5929. ------------------------[ KG060903 ]-------------------------
  5930.  
  5931. Problem:  When have sysop status but not using remote sysop name,
  5932. message scan does not identify mail to/from "SYSOP" as belonging
  5933. to the caller.   Mail to "SYSOP" should be shared by everyone with
  5934. sysop status.
  5935.  
  5936. Solution:  Change RBBS-PC.BAS as follows:
  5937.  
  5938. 4660 IF RemoteSysop THEN _
  5939.         CALL MsgNameMatch ("SYSOP",SysopFullName$,6,MsgFromCaller) : _
  5940.         CALL MsgNameMatch ("SYSOP",SysopFullName$,37,MsgToCaller) _
  5941.      ELSE WasX$ = LEFT$("SYSOP",-5*ZSysop) : _                       ' KG060903
  5942.           CALL MsgNameMatch (MsgUserName$,WasX$,6,MsgFromCaller) : _ ' KG060903
  5943.           CALL MsgNameMatch (MsgUserName$,WasX$,37,MsgToCaller)      ' KG060903
  5944.      UserInHeader = (MsgFromCaller OR MsgToCaller)
  5945.      RETURN
  5946.  
  5947. ------------------------[ KG060902 ]-------------------------
  5948.  
  5949. Problem:  When leave a msg to public name of sysop, can say the user not
  5950. found and caution against leaving mail.
  5951.  
  5952. Solution:  Change RBBSSUB2.BAS as follows:
  5953.  
  5954. 2250 ' $SUBTITLE: 'WhoCheck - Checks whether user exists'
  5955. ' $PAGE
  5956. '
  5957. '  NAME    -- WhoCheck
  5958. '
  5959. '  INPUTS  --   PARAMETER                    MEANING
  5960. '              WhoFind$                User to find
  5961. '
  5962. '  OUTPUTS --  WhoFound                Whether user found
  5963. '              UserNumFound           Record # of user
  5964. '
  5965. '  PURPOSE --  Validate that user record exists.  Sysop
  5966. '              counted as found even if lack user record.
  5967. '
  5968.      SUB WhoCheck (WhoFind$,WhoFound,UserNumFound) STATIC
  5969.      UserNumFound = 0
  5970.      IF ZStartHash <> 1 THEN _
  5971.         WhoFound = ZTrue : _
  5972.         EXIT SUB
  5973.      Work128$ = ZUserRecord$
  5974.      WhoFound = ZFalse
  5975.      ToSysop = (INSTR(WhoFind$,"SYSOP") > 0 OR _
  5976.                 INSTR(WhoFind$,ZSysopFirstName$ + " " + ZSysopLastName$) > 0) ' KG060902
  5977.      CALL OpenUser (HighestUserRecord)
  5978.      FIELD 5, 128 AS ZUserRecord$
  5979.      IF ToSysop THEN _
  5980.         WasX$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
  5981.      ELSE WasX$ = WhoFind$
  5982.      IF LEN(WasX$) > 1 THEN _
  5983.         CALL FindUser (WasX$,"",ZStartHash,ZLenHash,_
  5984.                        0,0,HighestUserRecord,WhoFound,_
  5985.                        UserNumFound,ZWasSL)
  5986.      LSET ZUserRecord$ = Work128$
  5987.      IF NOT WhoFound THEN _
  5988.         IF ToSysop THEN _
  5989.            WhoFound = ZTrue _
  5990.         ELSE CALL QuickTPut1 (WhoFind$ + " not active user")
  5991.      END SUB
  5992.  
  5993. ------------------------[ KG060901 ]-------------------------
  5994.  
  5995. Problem:  When leave mail to person not found because not in user file,
  5996. will still say the receiver "will be notified" has mail waiting, even though
  5997. can't and won't.
  5998.  
  5999. Solution:  Change RBBSUB2.BAS as follows:
  6000.  
  6001. 2032 IF MsgTo$ <> "ALL" THEN _
  6002.         IF (LEFT$(MsgTo$,4) <> "ALL " AND ZStartHash = 1) THEN _
  6003.            ZWasDF = INSTR(MsgTo$+" @"," @") : _                      ' KG052201
  6004.            TempHashValue$ = LEFT$(MsgTo$,ZWasDF-1) : _               ' KG052201
  6005.            CALL WhoCheck (TempHashValue$,Found,RcvrRecNum) : _
  6006.            IF NOT Found THEN _
  6007.               ZLastIndex = 0 : _
  6008.               RcvrRecNum = 0 : _                                     ' KG060901
  6009.               IF NOT ZReply THEN _
  6010.                  ZOutTxt$ = "[R]e-enter name, Q)uit, C)ontinue" : _
  6011.                  ZTurboKey = -ZTurboKeyUser : _
  6012.                  ZLastIndex = 0 : _
  6013.                  GOSUB 2033 : _
  6014.                  ZWasZ$ = ZUserIn$(1) : _
  6015.                  CALL AllCaps (ZWasZ$) : _
  6016.                  IF ZWasZ$ <> "C" THEN _
  6017.                     MsgTo$ = "" : _
  6018.                     IF ZWasZ$ <> "Q" THEN _
  6019.                        GOTO 2020
  6020.      IF MsgTo$ = Temp$ THEN _
  6021.         ZOutTxt$ = "Msg would be from and to SAME PERSON!  Really do this (Y,[N])" : _
  6022.         ZLastIndex = 0 : _
  6023.         GOSUB 2033 : _
  6024.         IF NOT ZYes THEN _
  6025.            MsgTo$ = ""
  6026.      EXIT SUB
  6027.  
  6028. ------------------------[ KG060103 ]-------------------------
  6029.  
  6030. Problem:  Valid individuation fields are rejected by CONFIG was
  6031. conflicting with download ratios.   E.g. begin at 63, length 2,
  6032. should be ok (1st two characters of location) but is rejected.
  6033.  
  6034. Solution:  Change CONFIG.BAS as follows:
  6035.  
  6036. 18102 IF START.INDIV = 0 OR LEN.INDIV = 0 THEN_
  6037.         INDIV.ID$ = NONE.PICKED$ _
  6038.       ELSE INDIV.ID$ = "(nonstandard)"
  6039.       START.WRITE = START.INDIV
  6040.       LEN.WRITE = LEN.INDIV                                          ' KG060103
  6041.       GOSUB 17805
  6042.       IF NOT OK THEN _
  6043.          START.INDIV = 0 : _
  6044.          LEN.INDIV = 31 : _
  6045.          GOTO 18102
  6046.       START.WRITE = START.INDIV
  6047.       RETURN
  6048.  
  6049. ------------------------[ KG060102 ]-------------------------
  6050.  
  6051. Problem:  When use MiteSized version of RBBS, version name grows
  6052. by "/MITESIZE" every time enter a subboard.
  6053.  
  6054. Solution:  Replace RBBSLIT.MRG and MITEVER.LIT by the enclosed
  6055. new ones.
  6056.  
  6057. ------------------------[ KG060101 ]-------------------------
  6058.  
  6059. Problem:  (fix to a fix)  Remote SysOp name logged to callers
  6060. file when it should not be.
  6061.  
  6062. Solution:  Change RBBS-PC.BAS as follows:
  6063.  
  6064. (line 800)
  6065.  
  6066.        .
  6067.        .
  6068.        .
  6069.     CALL SetCrLf
  6070.     CALL SetPrompt
  6071.     CALL XferType (2,ZTrue)
  6072.     IF NOT SubBoard THEN _
  6073.        BoardCheckDate$ = PrevLastOn$
  6074.     GOSUB 5370                                                       ' KG060101
  6075.     IF ZWasA THEN _                                                  ' KG060101
  6076.        ZActiveUserName$ = "SYSOP"                                    ' KG060101
  6077.     IF ZExitToDoors OR SubBoard THEN _                               ' KG052701
  6078.        GOTO 815
  6079.     GOSUB 465
  6080.     IF (ZEightBit AND _
  6081.        ZAutoDownDesired) OR _
  6082.        ZAskID THEN _
  6083.        CALL TestUser
  6084.        .
  6085.        .
  6086.        .
  6087.  
  6088. 819 CALL Trim (ZWasCI$)                                              ' KG060101
  6089.     IF (ZNodeRecIndex < 2) THEN _
  6090.        GOTO 821
  6091.     GOSUB 4910
  6092.     GOSUB 24000
  6093.     GET 1,ZNodeRecIndex
  6094.     MID$(ZMsgRec$,1,31) = ZActiveUserName$ + _
  6095.                                  SPACE$(31 - LEN(ZActiveUserName$))
  6096.     MID$(ZMsgRec$,40,2) = " 0"
  6097.     MID$(ZMsgRec$,44,2) = STR$(ZBPS)
  6098.     MID$(ZMsgRec$,55,2) = " 0"
  6099.     MID$(ZMsgRec$,57,1) = "A"
  6100.     MID$(ZMsgRec$,60,5) = ZTalkToModemAt$ + _
  6101.                                  SPACE$(5 - LEN(ZTalkToModemAt$))
  6102.     MID$(ZMsgRec$,72,2) = " 0"
  6103.     MID$(ZMsgRec$,93,24) = ZWasCI$ + _
  6104.                                   SPACE$(24)
  6105.     PUT 1,ZNodeRecIndex
  6106.     GOSUB 12985
  6107.  
  6108. ------------------------[ MB052101 ]-------------------------
  6109.  
  6110. Problem:  When have colorization active, color from prior context
  6111. will sometimes spill into the report of # of minutes left.
  6112.  
  6113. Solution:  Change RBBSSUB3.BAS as follows:
  6114.  
  6115. 41032 ' $SUBTITLE: 'DispTimeRemain - Display users time remaining'
  6116. ' $PAGE
  6117. '
  6118. '  NAME    -- DispTimeRemain
  6119. '
  6120. '  INPUTS  --     PARAMETER                    MEANING
  6121. '              MinsRemaining
  6122. '
  6123. '  OUTPUTS --     PARAMETER                    MEANING
  6124. '                MinsRemaining               TIME IN MINUTES LEFT IN SESSION
  6125. '
  6126.       SUB DispTimeRemain (MinsRemaining) STATIC
  6127.       CALL TimeRemain (MinsRemaining)
  6128.       CALL QuickTPut1 (ZEmphasizeOff$ + STR$(MinsRemaining) + " min left") ' MB052101
  6129.       END SUB
  6130.  
  6131. ------------------------[ RC050901 ]-------------------------
  6132.  
  6133. Problem:  When return from a door and individuating callers
  6134. with same name, the individuation field is always asked,
  6135. whereas it should never ask for individuation (just like it
  6136. never asks again for name, just password at most).
  6137.  
  6138. Solution:  Add the following variable to RBBS-VAR.BAS:  ZIndivValue$.
  6139. Change RBBS-PC.BAS as follows:
  6140.  
  6141. 725 IF ZUserSecLevel < ZMinLogonSec THEN _
  6142.        ZLogonErrorIndex = 1 : _
  6143.        GOTO 460
  6144.     IF ZFirstName$ = ZLastName$ THEN _
  6145.        CALL QuickTPut1 (ZFirstNamePrompt$+"/"+ZLastNamePrompt$+" cannot be same") : _
  6146.        ZLogonErrorIndex = 3 : _
  6147.        GOTO 10620
  6148.     IF NOT ZRememberNewUsers THEN _
  6149.        GOSUB 13700 : _
  6150.        ZUserFileIndex = 0 : _
  6151.        GOSUB 12960: _
  6152.        PrevLastOn$ = "00-00-00": _
  6153.        GOTO 735
  6154.     ZNewUser = ZTrue
  6155.     CALL OpenUser (HighestUserRecord)
  6156.     GOSUB 9450
  6157.     GOSUB 12630
  6158.     MID$(ZUserRecord$,ZStartHash,ZLenHash) = LEFT$("NEWUSER",ZLenHash)
  6159.     IF ZStartIndiv > 0 THEN _                                        ' RC050901
  6160.        MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$       ' RC050901
  6161.     GOSUB 9440
  6162.  
  6163. (line 800)
  6164.       .
  6165.       .
  6166.       .
  6167. '
  6168. ' *  ALWAYS RECORD THE HASH/INDIVIDUATING FIELD TO EACH RECORD LOGGED OUT
  6169. '
  6170.      WasX$ = "{" + _                                                 ' KG052701
  6171.           HashValue$ + _                                             ' KG052701
  6172.           "/" + _                                                    ' KG052701
  6173.           ZIndivValue$ + _                                           ' RC050901
  6174.           "}"                                                        ' KG052701
  6175.      IF LEN(ZWasZ$) < 65 THEN _                                      ' KG052701
  6176.         WasX = 65 _                                                  ' KG052701
  6177.      ELSE WasX = LEN(ZWasZ$) + 2                                     ' KG052701
  6178.      MID$(ZWasNG$,WasX) = WasX$                                      ' KG052701
  6179.      CALL Printit ("  " + ZWasZ$)                                    ' KG052701
  6180.      IF ZNewUser THEN _                                              ' KG052701
  6181.         CALL UpdtCalr ("NEWUSER",1) : _                              ' KG052701
  6182.         CALL Muzak (2)                                               ' KG052701
  6183. '
  6184. ' *****  NOTIFY CALLER IF ABLE TO "AUTODOWN"  ****
  6185. '
  6186.        .
  6187.        .
  6188.        .
  6189.  
  6190. 815 ZDnlds = CVI(ZUserDnlds$)
  6191.     ZUplds = CVI(ZUserUplds$)
  6192.     IF ZEnforceRatios THEN _
  6193.        ZDLToday! = CVS(ZTodayDl$) : _
  6194.        ZBytesToday! = CVS(ZTodayBytes$) : _
  6195.        ZDLBytes! = CVS(ZDlBytes$) : _
  6196.        ZULBytes! = CVS(ZULBytes$)
  6197.     IF ZCurDate$ <> LEFT$(ZLastDateTimeOnSave$,8) THEN  _
  6198.        ZDLToday! = 0 : _
  6199.        ZBytesToday! = 0
  6200.     IF NOT GlobalsSet THEN _
  6201.        GlobalsSet = ZTrue : _
  6202.        ZGlobalDnlds = ZDnlds : _
  6203.        ZGlobalUplds = ZUplds : _
  6204.        ZGlobalDLToday! = ZDLToday! : _
  6205.        ZGlobalBytesToday! = ZBytesToday! : _
  6206.        ZGlobalDLBytes! = ZDLBytes! : _
  6207.        ZGlobalULBytes! = ZULBytes!
  6208.     'IF ZRatioRestrict# > 0 AND ZEnforceRatios THEN _
  6209.     '   IF ZByteMethod = 0 AND ZUplds < ZInitialCredit# THEN _
  6210.     '      ZUplds = ZInitialCredit# _
  6211.     '   ELSE IF ZByteMethod = 1 AND ZULBytes! < ZInitialCredit# THEN _
  6212.     '           ZULBytes! = ZInitialCredit#
  6213.     GOSUB 827
  6214.     LSET ZUserOption$ = MKI$(ZTimesLoggedOn) + _
  6215.                          MID$(ZUserOption$,3)
  6216.     LSET ZLastDateTimeOn$ = ZCurDate$ + _
  6217.                               " " + _
  6218.                               ZTimeLoggedOn$
  6219.     MID$(ZUserRecord$,ZStartHash,ZLenHash) = HashValue$
  6220.     IF ZStartIndiv > 0 THEN _
  6221.        MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$       ' RC050901
  6222.     LSET ZUserName$ = ZOrigUserName$
  6223.     IF (NOT ZExitToDoors) AND NOT (ZOrigMsgFile$ = ZActiveMessageFile$ AND SubBoard) THEN _
  6224.        CALL AutoPage
  6225.     IF NOT SubBoard THEN _
  6226.        ZOrigUserFileIndex = ZUserFileIndex
  6227.     GOSUB 9440
  6228.     GOSUB 12991
  6229.     CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)
  6230.     IF TurboLogon THEN _
  6231.        GOTO 819
  6232.     IF SkipWelcomeScreen AND _
  6233.        (ZUserSecLevel >= ZAllowCallerTurbo) THEN _
  6234.        GOTO 816
  6235.     IF NOT SameUser THEN _
  6236.        ZStopInterrupts = NOT ZWelcomeInterruptable : _
  6237.        ZBypassTimeCheck = ZTrue : _
  6238.        ZFileName$ = ZWelcomeFile$ : _
  6239.        ZDisplayAsUnit = ZTrue : _
  6240.        GOSUB 1790 : _
  6241.        ZDisplayAsUnit = ZFalse
  6242.     ZBypassTimeCheck = ZFalse
  6243.     ZStopInterrupts = ZTrue
  6244.  
  6245. 12300 WasA1$ = ""
  6246.       Attempts = 0
  6247.       UserSecLevelSave = ZUserSecLevel
  6248.       FirstNameSave$ = ZFirstName$
  6249.       LastNameSave$ = ZLastName$
  6250.       ActiveUserNameSave$ = ZActiveUserName$
  6251.       CityStateSave$ = ZWasCI$
  6252.       HashValueSave$ = HashValue$
  6253.       IndivValueSave$ = ZIndivValue$                                 ' RC050901
  6254.       GOSUB 12500
  6255.       GOSUB 12840
  6256.       GOSUB 12850
  6257.       GOSUB 12598
  6258.       IF ZUserFileIndex = 0 THEN _
  6259.          GOSUB 12984 : _
  6260.          GOTO 12330
  6261.       IF Found THEN _
  6262.          WasD$ = "User already exists" : _
  6263.          GOSUB 1315 : _
  6264.          GOSUB 12984 : _
  6265.          GOTO 12330
  6266.  
  6267. 12310 GOSUB 12630
  6268.       GOSUB 12800
  6269.       GOSUB 11395
  6270.       ZTempSecLevel = WasOF
  6271.       GOSUB 12900
  6272.       LSET ZLastDateTimeOn$ = ZCurDate$ + _
  6273.                                 " " + _
  6274.                                 ZTimeLoggedOn$
  6275.       GOSUB 12960
  6276.       CALL AllCaps (ZUserIn$)
  6277.       LSET ZCityState$ = ZUserIn$
  6278.       LSET ZElapsedTime$ = MKI$(0)
  6279.       IF ZStartHash > 1 THEN _
  6280.          MID$(ZUserRecord$,ZStartHash,ZLenHash) = HashValue$
  6281.       IF ZStartIndiv > 1 THEN _
  6282.          MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$     ' RC050901
  6283.       GOSUB 9440
  6284.  
  6285. 12330 ZUserSecLevel = UserSecLevelSave
  6286.       ZFirstName$ = FirstNameSave$
  6287.       ZLastName$ = LastNameSave$
  6288.       ZActiveUserName$ = ActiveUserNameSave$
  6289.       ZWasCI$ = CityStateSave$
  6290.       HashValue$ = HashValueSave$
  6291.       ZIndivValue$ = IndivValueSave$                                 ' RC050901
  6292.       ZUserFileIndex = WasTU
  6293.       LSET ZUserRecord$ = UserRecordHold$
  6294.       GOTO 11001
  6295.  
  6296. 12598 TempHashValue$ = HashValue$
  6297.       TempIndivValue$ = ZIndivValue$                                 ' RC050901
  6298.  
  6299. 12850 IF ZStartIndiv < 1 THEN _
  6300.          RETURN
  6301.       IF ZStartIndiv = 1 THEN _
  6302.          ZIndivValue$ = ZActiveUserName$ : _                         ' RC050901
  6303.          RETURN
  6304.       IF ZExitToDoors THEN _                                         ' RC050901
  6305.          RETURN                                                      ' RC050901
  6306.       WasX$ = WasA1$ + _
  6307.            ZPromptIndiv$
  6308.       CALL UntilRight (WasX$,ZIndivValue$,2,ZLenIndiv)               ' RC050901
  6309.       RETURN
  6310.  
  6311. Change RBBSSUB3.BAS as follows:
  6312.  
  6313. 43070 ZActiveMessageFile$ = ZOrigMsgFile$
  6314.       ZSubParm = 3
  6315.       CALL FileLock
  6316.       CALL OpenMsg
  6317.       FIELD 1, 128 AS ZMsgRec$
  6318.       GET 1,ZNodeRecIndex
  6319.       IF ZGlobalSysop THEN _
  6320.          MID$(ZMsgRec$,1,30) = "SYSOP" + SPACE$(25)
  6321.       MID$(ZMsgRec$,40,2) = STR$(ZExitToDoors)
  6322.       MID$(ZMsgRec$,42,2) = STR$(ZEightBit)
  6323.       MID$(ZMsgRec$,44,2) = STR$(ZBPS)
  6324.       MID$(ZMsgRec$,46,2) = STR$(ZUpperCase)
  6325.       MID$(ZMsgRec$,48,5) = MKS$(ZNumDnldBytes!) + MID$(STR$(-ZBatchTransfer),2) ' KG022101
  6326.       MID$(ZMsgRec$,53,2) = STR$(ZWasGR)
  6327.       MID$(ZMsgRec$,55,2) = STR$(ZSysop)
  6328.       MID$(ZMsgRec$,65,3) = CHR$(VAL(LEFT$(ZTimeLoggedOn$,2))) + _
  6329.                                    CHR$(VAL(MID$(ZTimeLoggedOn$,4,2))) + _
  6330.                                    CHR$(VAL(MID$(ZTimeLoggedOn$,7,2)))
  6331.       MID$(ZMsgRec$,72,2) = STR$(ZPrivateDoor)
  6332.       MID$(ZMsgRec$,74,1) = MID$(STR$(ZTransferFunction),2,1)
  6333.       MID$(ZMsgRec$,75,1) = ZWasFT$
  6334.       MID$(ZMsgRec$,113,2) = MKI$(CINT(ZTimeCredits!)/60)
  6335.       MID$(ZMsgRec$,79,8) = LEFT$(ZDooredTo$+"        ",8)
  6336.       MID$(ZMsgRec$,91,2) = STR$(ZReliableMode)
  6337.       CALL BreakFileName (ZCurPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZFalse)
  6338.       MID$(ZMsgRec$,93,8) = ZUserIn$ + SPACE$(8 - LEN(ZUserIn$))
  6339.       IF ZLocalUser THEN _
  6340.          ZWasZ$ = ZCarriageReturn$ + ZCarriageReturn$ _              ' KG030601
  6341.       ELSE ZWasZ$ = " 0"                                             ' KG030601
  6342.       MID$(ZMsgRec$,101,2) = ZWasZ$                                  ' KG030601
  6343.       MID$(ZMsgRec$,103,2) = STR$(ZLocalUserMode)                    ' KG030601
  6344.       ZConfName$ = LEFT$(ZConfName$,INSTR(ZConfName$ + " "," ") - 1)
  6345.       MID$(ZMsgRec$,105,8) = ZConfName$ + SPACE$(8 - LEN(ZConfName$))
  6346.       MID$(ZMsgRec$,115,1) = MID$(STR$(ZAutoLogoffReq),2,1)
  6347.       MID$(ZMsgRec$,117,2) = STR$(ZMenuIndex)
  6348.       MID$(ZMsgRec$,119,2) = LEFT$(DATE$,2)
  6349.       MID$(ZMsgRec$,121,2) = MID$(DATE$,4,2)
  6350.       MID$(ZMsgRec$,123,2) = RIGHT$(DATE$,2)
  6351.       MID$(ZMsgRec$,125,2) = LEFT$(TIME$,2)
  6352.       MID$(ZMsgRec$,127,2) = MID$(TIME$,4,2)
  6353. ' ***   Save additional parameters for door restoral
  6354.       CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
  6355.       CALL PrintWorkA (STR$(ZLimitMinsPerSession))
  6356.       CALL PrintWorkA (ZWasNG$)                                      ' KG052701
  6357.       CALL PrintWorkA (ZIndivValue$)                                 ' NC050901
  6358.       CLOSE 2
  6359.  
  6360. 44003 ZUserLogonTime! = VAL(HourLoggedOn$) * 3600! + _               ' KK030901
  6361.                         VAL(MinLoggedOn$) * 60! + _                  ' KK030901
  6362.                         VAL(SecLoggedOn$)
  6363.       HourLoggedOn$ = ""
  6364.       MinLoggedOn$ = ""
  6365.       SecLoggedOn$ = ""
  6366.       IF ZMinsPerSession < 1 THEN _
  6367.          ZMinsPerSession = 3
  6368.       IF NOT ZEightBit THEN _
  6369.          OUT ZLineCntlReg,&H1A
  6370.       IF LEFT$(ZMsgRec$,7) = "SYSOP  " THEN _
  6371.          ZFirstName$ = ZSysopPswd1$ : _
  6372.          ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
  6373.       ELSE ZFirstNameEnd = INSTR(ZMsgRec$," ") : _
  6374.            ZLastNameEnd = INSTR(ZFirstNameEnd + 1,ZMsgRec$ + " ","  ") : _
  6375.            ZFirstName$ = LEFT$(ZMsgRec$,ZFirstNameEnd-1) : _
  6376.            ZLastName$ = MID$(ZMsgRec$,ZFirstNameEnd + 1,ZLastNameEnd - (ZFirstNameEnd + 1)) : _
  6377.            ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
  6378.       ZWasZ$ = ZFirstName$
  6379.       CALL OpenWork (2,ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
  6380.       CALL ReadDir (2,1)
  6381.       ZLimitMinsPerSession = VAL (ZOutTxt$)
  6382.       CALL ReadDir (2,1)                                             ' KG052701
  6383.       ZWasNG$ = ZOutTxt$                                             ' KG052701
  6384.       CALL ReadDir (2,1)                                             ' RC050901
  6385.       ZIndivValue$ = ZOutTxt$                                        ' RC050901
  6386.       CLOSE 2
  6387.       END SUB
  6388.  
  6389. ------------------------[ KG052901 ]-------------------------
  6390.  
  6391. Problem:  When using Programmable User Interface, macros will not
  6392. work after do a join to a conference that does not exist or after
  6393. execute conference view and go to end of list without joining
  6394. anything.  Problem reported by Ken Humrich.
  6395.  
  6396. Solution:  Change RBBS-PC.BAS as follows:
  6397.  
  6398. 1232 MID$(ZLastCommand$,2,1) = " "                                   ' KG052901
  6399.      IF ZCustomPUI THEN _                                            ' KG052901
  6400.         CALL UserFace (ZUserGraphicDefault$) : _
  6401.         GOSUB 12997 : _
  6402.         GOTO 1235                                                    ' KG052901
  6403.      ZOutTxt$ = ZCmdPrompt$
  6404.      GOSUB 12930
  6405.      IF ZWasQ = 0 THEN _
  6406.         GOTO 1230
  6407.  
  6408. ------------------------[ KG052702 ]-------------------------
  6409.  
  6410. Problem:  In local mode, when log to printer, not logging to
  6411. caller's file.   This messages up caller analysis on networks.
  6412. Also, unnecessary code check when entering/exiting a conference
  6413. because check is done in logging routine.   Finally,
  6414. entrance/exit to conference made to log all the time and not just
  6415. on extended logging.
  6416.  
  6417. Solution:  Change RBBS-PC.BAS as follows:
  6418.  
  6419. 4900 CALL UpdtCalr ("Entered " + ZConfName$,2)                       ' KG052702
  6420.      CALL QuickTPut1 ("Welcome to " + ZConfName$)
  6421.  
  6422. 5350 IF ZConfName$ <> "MAIN" THEN _
  6423.         CALL QuickTPut1 ("Rejoining " + OrigMsgName$)
  6424.      ZConfName$ = "MAIN"
  6425.      ConfFileName$ = OrigMsgName$
  6426.      ZNewsFileName$ = OrigNewsFileName$
  6427.      TurboLogon = ZTrue
  6428.      ZWasQ = 0
  6429.      ZInConfMenu = ZTrue
  6430.      IF ZActiveUserName$ = "SYSOP" THEN _
  6431.         ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ : _
  6432.         CALL Trim (ZActiveUserName$)
  6433.      ZConfigFileName$ = ZOrigCnfg$
  6434.      CALL ReadDef (ZConfigFileName$)
  6435.      IF ZOrigMsgFile$ <> ZActiveMessageFile$ THEN _
  6436.         ZActiveMessageFile$ = ZOrigMsgFile$ : _
  6437.         GOSUB 5343
  6438.      IF ZOrigUserFile$ <> ZActiveUserFile$ THEN _
  6439.         GOSUB 5380 : _
  6440.         ZActiveUserFile$ = ZOrigUserFile$ : _
  6441.         ZActiveUserName$ = ZOrigUserName$ : _
  6442.         GOSUB 12598 : _
  6443.         GOSUB 12990 : _
  6444.         IF Found THEN _
  6445.            GOSUB 9500 : _
  6446.            ZMainUserFileIndex = ZUserFileIndex : _
  6447.            CALL SetPrompt : _
  6448.            CALL XferType (2,ZTrue) _
  6449.         ELSE ZUserFileIndex = 0 : _
  6450.              ZMainUserFileIndex = 0
  6451.      CALL UpdtCalr ("Exited Conference",2)                           ' KG052702
  6452.      GOSUB 2350
  6453.      ZUplds = ZGlobalUplds
  6454.      ZDnlds = ZGlobalDnlds
  6455.      ZDLToday! = ZGlobalDLToday!
  6456.      ZBytesToday! = ZGlobalBytesToday!
  6457.      ZDLBytes! = ZGlobalDLBytes!
  6458.      ZULBytes! = ZGlobalULBytes!
  6459.  
  6460. Change RBBSSUB1.BAS as follows:
  6461.  
  6462. 13670 LSET ZCallersRecord$ = WasX$
  6463.       CALL Printit (ZCallersRecord$)                                 ' KG052702
  6464.       ZCallersFileIndex! = ZCallersFileIndex! + 1
  6465.  
  6466. ------------------------[ KG052701 ]-------------------------
  6467.  
  6468. Problem:  When join subboards, the time shown in callers file
  6469. for logon is the time joined last subboard rather than original
  6470. time logged on.
  6471.  
  6472. Solution:  Change RBBS-PC.BAS as follows:
  6473.  
  6474. Omit code at line 837.
  6475.  
  6476. 800 CALL DoorReturn
  6477.     IF ZAdjustedSecurity THEN _
  6478.        GOSUB 5135
  6479.     IF ZOrigCnfg$ = ZCurDef$ THEN _
  6480.        ZMainUserFileIndex = ZUserFileIndex : _
  6481.        ZOrigSec = ZUserSecLevel : _
  6482.        ZUserSecSave = ZUserSecLevel : _
  6483.        ZOrigUserName$ = ZActiveUserName$
  6484.     ZTimesLoggedOn = CVI(MID$(ZUserOption$,1,2)) - _
  6485.        ((ZOrigCnfg$ <> ZCurDef$ OR NOT SubBoard) AND _
  6486.         (NOT ZPrivateDoor) AND (NOT ZExitToDoors))
  6487.     GOSUB 9500
  6488.     IF (NOT ZExitToDoors) AND (NOT SubBoard) THEN _
  6489.        CALL UpdtCalr (ZActiveUserName$ + " from " + ZWasCI$ + _
  6490.                  " Lvl" + STR$(ZUserSecLevel) + " " + TIME$,2)
  6491.     PrevLastOn$ = ZLastDateTimeOn$
  6492.     IF ZLocalUser THEN _
  6493.        ZTalkToModemAt$ = "9600" : _
  6494.        ZBaudParity$ = "9600 BAUD,N,8,1" : _
  6495.        ZModemInitBaud$ = "9600" : _
  6496.        ZSnoop = ZTrue : _
  6497.        ZLineFeeds = ZTrue
  6498.     CALL SetCrLf
  6499.     CALL SetPrompt
  6500.     CALL XferType (2,ZTrue)
  6501.     IF NOT SubBoard THEN _
  6502.        BoardCheckDate$ = PrevLastOn$
  6503.     IF ZExitToDoors OR SubBoard THEN _                               ' KG052701
  6504.        GOTO 815
  6505.     GOSUB 465
  6506.     IF (ZEightBit AND _
  6507.        ZAutoDownDesired) OR _
  6508.        ZAskID THEN _
  6509.        CALL TestUser
  6510.     CALL QuickTPut1 ("Logging " + ZActiveUserName$)
  6511.     CALL Talk (1,ZOutTxt$)
  6512.     CALL QuickTPut1 ("RBBS-PC " + ZVersionID$ + " NODE " + ZNodeID$ + _
  6513.                 ", OPERATING AT " + ZBaudParity$)
  6514.     CALL SkipLine (1)
  6515.     Attempts = 0
  6516.     ZWasZ$ = ZActiveUserName$ + _                                    ' KG052701
  6517.             " on at " + _                                            ' KG052701
  6518.             ZCurDate$ + _                                            ' KG052701
  6519.             ", " + _                                                 ' KG052701
  6520.             ZTime$ + _                                               ' KG052701
  6521.             " from " + _                                             ' KG052701
  6522.             ZWasCI$ + _                                              ' KG052701
  6523.             ", " + _                                                 ' KG052701
  6524.             ZBaudParity$                                             ' KG052701
  6525.      ZWasNG$ = ZWasZ$ + SPACE$(128 - LEN(ZWasZ$))                    ' KG052701
  6526.      MsgUserName$ = LEFT$(ZActiveUserName$+"  ",22)                  ' KG052701
  6527. '
  6528. ' *  ALWAYS RECORD THE HASH/INDIVIDUATING FIELD TO EACH RECORD LOGGED OUT
  6529. '
  6530.      WasX$ = "{" + _                                                 ' KG052701
  6531.           HashValue$ + _                                             ' KG052701
  6532.           "/" + _                                                    ' KG052701
  6533.           IndivValue$ + _                                            ' KG052701
  6534.           "}"                                                        ' KG052701
  6535.      IF LEN(ZWasZ$) < 65 THEN _                                      ' KG052701
  6536.         WasX = 65 _                                                  ' KG052701
  6537.      ELSE WasX = LEN(ZWasZ$) + 2                                     ' KG052701
  6538.      MID$(ZWasNG$,WasX) = WasX$                                      ' KG052701
  6539.      CALL Printit ("  " + ZWasZ$)                                    ' KG052701
  6540.      IF ZNewUser THEN _                                              ' KG052701
  6541.         CALL UpdtCalr ("NEWUSER",1) : _                              ' KG052701
  6542.         CALL Muzak (2)                                               ' KG052701
  6543. '
  6544. ' *****  NOTIFY CALLER IF ABLE TO "AUTODOWN"  ****
  6545. '
  6546.     IF ZEightBit AND ZAutoDownYes THEN _
  6547.        ZOutTxt$ = CHR$(9) + _
  6548.             ZReturnLineFeed$ + _
  6549.             "You may use AUTODOWNLOADing!" : _
  6550.        CALL RingCaller : _
  6551.        CALL DelayTime(4)
  6552.  
  6553. Change RBBSSUB3.BAS as follows:
  6554.  
  6555. (line 43070)
  6556.            .
  6557.            .
  6558.            .
  6559. ' ***   Save additional parameters for door restoral
  6560.       CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
  6561.       CALL PrintWorkA (STR$(ZLimitMinsPerSession))
  6562.       CALL PrintWorkA (ZWasNG$)                                      ' KG052701
  6563.       CLOSE 2
  6564.  
  6565. 44003 ZUserLogonTime! = VAL(HourLoggedOn$) * 3600! + _               ' KK030901
  6566.                         VAL(MinLoggedOn$) * 60! + _                  ' KK030901
  6567.                         VAL(SecLoggedOn$)
  6568.       HourLoggedOn$ = ""
  6569.       MinLoggedOn$ = ""
  6570.       SecLoggedOn$ = ""
  6571.       IF ZMinsPerSession < 1 THEN _
  6572.          ZMinsPerSession = 3
  6573.       IF NOT ZEightBit THEN _
  6574.          OUT ZLineCntlReg,&H1A
  6575.       IF LEFT$(ZMsgRec$,7) = "SYSOP  " THEN _
  6576.          ZFirstName$ = ZSysopPswd1$ : _
  6577.          ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
  6578.       ELSE ZFirstNameEnd = INSTR(ZMsgRec$," ") : _
  6579.            ZLastNameEnd = INSTR(ZFirstNameEnd + 1,ZMsgRec$ + " ","  ") : _
  6580.            ZFirstName$ = LEFT$(ZMsgRec$,ZFirstNameEnd-1) : _
  6581.            ZLastName$ = MID$(ZMsgRec$,ZFirstNameEnd + 1,ZLastNameEnd - (ZFirstNameEnd + 1)) : _
  6582.            ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
  6583.       ZWasZ$ = ZFirstName$
  6584.       CALL OpenWork (2,ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
  6585.       CALL ReadDir (2,1)
  6586.       ZLimitMinsPerSession = VAL (ZOutTxt$)
  6587.       CALL ReadDir (2,1)                                             ' KG052701
  6588.       ZWasNG$ = ZOutTxt$                                             ' KG052701
  6589.       CLOSE 2
  6590.       END SUB
  6591. ------------------------[ KG052401 ]-------------------------
  6592.  
  6593. Problem:  When shell to a door and it writes information to
  6594. the callers file, the entries are overwritten when returns to
  6595. RBBS.
  6596.  
  6597. Solution:  Add the following variable to RBBS-VAR.BAS:
  6598. ZPrevCaller$.   Change RBBSSUB1.BAS as follows:
  6599.  
  6600. (line 108)
  6601.  
  6602.     SUB SetCall STATIC
  6603.     ON ERROR GOTO 65000
  6604.     IF ZPrevCaller$ = ZCallersFile$ OR ZCallersFilePrefix$ = "" THEN _ ' KG052401
  6605.        EXIT SUB
  6606.     ZPrevCaller$ = ZCallersFile$                                     ' KG052401
  6607.     ZCallersFileIndex! = 1
  6608.     CLOSE 2
  6609.     CLOSE 4
  6610.     IF ZShareIt THEN _
  6611.        OPEN ZCallersFile$ FOR RANDOM SHARED AS #4 LEN=64 _
  6612.     ELSE OPEN "R",4,ZCallersFile$,64
  6613.     FIELD 4,64 AS ZCallersRecord$
  6614.     IF LOF(4) > 0 THEN _
  6615.        ZCallersFileIndex! = LOF(4) / 64
  6616.     IF ZCallersFileIndex! < 1 THEN _
  6617.        ZCallersFileIndex! = 0
  6618.     ZUserIn$ = STRING$(13,0)
  6619.  
  6620. Change RBBSUB2.BAS as follows:
  6621.  
  6622. 10989 IF ZTransferFunction = 3 THEN _
  6623.          ZWasY$ = "Registration" _
  6624.       ELSE ZWasY$ = ZDooredTo$
  6625.       ZOutTxt$ = ZWasY$ + _
  6626.            " door opened at " + _
  6627.            TIME$ + _
  6628.            " on " + _
  6629.            DATE$
  6630.       ZSubParm = 5
  6631.       CALL TPut
  6632.       CALL UpdtCalr (ZDooredTo$ + " door opened!",2)
  6633.       CLOSE 2
  6634.       OPEN "O",2,"DORINFO" + _
  6635.                  ZNodeFileID$ + _
  6636.                  ".DEF"
  6637.       PRINT #2,ZRBBSName$
  6638.       PRINT #2,ZSysopFirstName$
  6639.       PRINT #2,ZSysopLastName$
  6640.       IF ZLocalUser THEN _
  6641.          PRINT #2,"COM0" _
  6642.       ELSE PRINT #2,ZComPort$
  6643.       ZUserIn$ = MID$(ZBaudParity$,INSTR(ZBaudParity$," B"))
  6644.       PRINT #2,ZTalkToModemAt$;ZUserIn$
  6645.       PRINT #2,ZNetworkType
  6646.       IF ZGlobalSysop THEN _
  6647.          PRINT #2,"SYSOP" : _
  6648.          PRINT #2,"" _
  6649.       ELSE PRINT #2,ZFirstName$ : _
  6650.            PRINT #2,ZLastName$
  6651.       PRINT #2,ZCityState$
  6652.       PRINT #2,ZWasGR
  6653.       PRINT #2,ZUserSecLevel
  6654.       CALL TimeRemain (MinsRemaining)
  6655.       CALL CheckInt (DoorTime$)
  6656.       IF ZErrCode = 0 AND ZTestedIntValue > 0 THEN _
  6657.          IF MinsRemaining > ZTestedIntValue THEN _
  6658.             MinsRemaining = ZTestedIntValue
  6659.       PRINT #2,INT(MinsRemaining)
  6660.       PRINT #2,ZFossil
  6661.       IF ExitMethod$ = "S" THEN _
  6662.          CLOSE 4 : _                                                 ' KG052401
  6663.          CALL ShellExit (ExitTemplate$) : _
  6664.          ZPrevCaller$ = "" : _                                       ' KG052401
  6665.          CALL SetCall : _                                            ' KG052401
  6666.          ZExitToDoors = ZTrue : _
  6667.          CALL BufFile (ZDoorDisplay$,WasX) : _
  6668.          CALL DoorReturn _
  6669.       ELSE ZOutTxt$(1) = ZDiskForDos$ + _
  6670.                   "COMMAND /C " + _
  6671.                   ExitTo$ : _
  6672.            ZOutTxt$(2) = ZRBBSBat$ : _
  6673.            CALL RBBSExit (ZOutTxt$(),2)
  6674.       END SUB
  6675.  
  6676. ------------------------[ KG052201 ]-------------------------
  6677.  
  6678. Problem:  Set echomail processors want to add "@ <node#>" after the
  6679. name of the person sending mail.   But then, when person replies,
  6680. name is never found for setting mail waiting.
  6681.  
  6682. Solution:  Reguard name as terminated with first "@".
  6683.  
  6684. Change RBBSSUB2.BAS as follows:
  6685.  
  6686. 2032 IF MsgTo$ <> "ALL" THEN _
  6687.         IF (LEFT$(MsgTo$,4) <> "ALL " AND ZStartHash = 1) THEN _
  6688.            ZWasDF = INSTR(MsgTo$+" @"," @") : _                      ' KG052201
  6689.            TempHashValue$ = LEFT$(MsgTo$,ZWasDF-1) : _               ' KG052201
  6690.            CALL WhoCheck (TempHashValue$,Found,RcvrRecNum) : _
  6691.            IF NOT Found THEN _
  6692.               ZLastIndex = 0 : _
  6693.               IF NOT ZReply THEN _
  6694.                  ZOutTxt$ = "[R]e-enter name, Q)uit, C)ontinue" : _
  6695.                  ZTurboKey = -ZTurboKeyUser : _
  6696.                  ZLastIndex = 0 : _
  6697.                  GOSUB 2033 : _
  6698.                  ZWasZ$ = ZUserIn$(1) : _
  6699.                  CALL AllCaps (ZWasZ$) : _
  6700.                  IF ZWasZ$ <> "C" THEN _
  6701.                     MsgTo$ = "" : _
  6702.                     IF ZWasZ$ <> "Q" THEN _
  6703.                        GOTO 2020
  6704.      IF MsgTo$ = Temp$ THEN _
  6705.         ZOutTxt$ = "Msg would be from and to SAME PERSON!  Really do this (Y,[N])" : _
  6706.         ZLastIndex = 0 : _
  6707.         GOSUB 2033 : _
  6708.         IF NOT ZYes THEN _
  6709.            MsgTo$ = ""
  6710.      EXIT SUB
  6711.  
  6712. Change RBBSSUB5.BAS as follows:
  6713.  
  6714. 63540 ' Match Name to one in message file
  6715.       SUB MsgNameMatch (PrimeName$,AltName$,SearchPos,Found) STATIC
  6716.       WasX$ = LEFT$(PrimeName$+"  ",22-8*(SearchPos < 7))
  6717.       GOSUB 63542                                                    ' KG052201
  6718.       IF Found OR AltName$ = "" THEN _                               ' KG052201
  6719.          EXIT SUB                                                    ' KG052201
  6720.       WasX$ = LEFT$(AltName$ + "  ",22-8*(SearchPos < 7))
  6721.       GOSUB 63542                                                    ' KG052201
  6722.       EXIT SUB                                                       ' KG052201
  6723. 63542 WasY$ = MID$(ZMsgRec$,SearchPos,LEN(WasX$))                    ' KG052201
  6724.       ZWasDF = INSTR(WasY$,"@")                                      ' KG052201
  6725.       IF ZWasDF > 0 THEN _                                           ' KG052201
  6726.          MID$(WasY$,ZWasDF) = "      "                               ' KG052201
  6727.       Found = (WasY$ = WasX$)                                        ' KG052201
  6728.       RETURN                                                         ' KG052201
  6729.       END SUB
  6730.  
  6731. ------------------------[ DA042401 ]-------------------------
  6732.  
  6733. Problem:  Get an infinite loop when do an file S)earch and hit a
  6734. string in the extended description you have insufficient suecurity
  6735. to view because is protected by a security level (= in front of name).
  6736.  
  6737. Solution:  Change RBBSSUB3.BAS as follows:
  6738.  
  6739. 58169 CALL CheckInt (MID$(PartToPrint$,34))
  6740.       IF ZUserSecLevel < ZTestedIntValue THEN _
  6741.          LastOK = ZFalse : _
  6742.          FailedSearch = ZFalse : _                                   ' DA042401
  6743.          GOTO 58168
  6744.       MID$(PartToPrint$,1,13) = MID$(PartToPrint$,2,12) + " "
  6745.       ZWasA = LEN(STR$(ZTestedIntValue))
  6746.       MID$(PartToPrint$,34) = MID$(PartToPrint$,34 + ZWasA) + SPACE$(ZWasA)
  6747.       GOTO 58172
  6748.  
  6749. ------------------------[ KG051702 ]-------------------------
  6750.  
  6751. Problem:  When security for K)ill command set too high to use,
  6752. caller still presented with K option in msg read when reading own
  6753. mail.
  6754.  
  6755. Solution:  Change RBBS-PC.BAS as follows:
  6756.  
  6757. 4600   IF ScanMsgs THEN _
  6758.           GOSUB 8020 : _
  6759.           GOTO 4630
  6760.        IF NOT JustSearching THEN _
  6761.           GOSUB 8000 : _
  6762.           IF QuotedReply THEN _
  6763.              QuotedReply = ZFalse : _
  6764.              GOTO 4610
  6765.        IF ZRet THEN _
  6766.           GOTO 4630
  6767.        CanChangeSec = (ZUserSecLevel => ZSecChangeMsg)
  6768.        WasI =  - ((ZUserSecLevel >= ZOptSec(9)) AND (UserInHeader OR CanKill)) ' KG051702
  6769.        IF ZExpertUser THEN _
  6770.           WasA1$ = ",R,T,=,+,-" + _
  6771.                 MID$(",F",1,- (UserInHeader OR CanChangeSec) * 2) + _
  6772.                 MID$(",K",1,WasI * 2) + _                            ' KG051702
  6773.                 MID$(",U",1,- (ZUserSecLevel >= ZOptSec(54)) * 2) + _
  6774.                 MID$(",S",1, - CanChangeSec * 2) _
  6775.        ELSE WasA1$ = ",R)eply,T)hread,=)again,+,-" + _
  6776.                   MID$(",F)wd",1, - (UserInHeader OR CanChangeSec) * 5) + _
  6777.                   MID$(",K)ill",1, WasI * 6) + _                     ' KG051702
  6778.                   MID$(",U)ser",1,- (ZUserSecLevel >= ZOptSec(54)) * 6) + _
  6779.                   MID$(",S)ec",1, - CanChangeSec * 5)
  6780.        ZTurboKey = -ZTurboKeyUser
  6781.        IF JustSearching OR NOT JustReplied THEN _
  6782.           GOTO 4610
  6783.        JustReplied = ZFalse
  6784.        CALL AskMore (WasA1$,ZTrue,ZFalse,ZAnsIndex,ZFalse)
  6785.        CALL SkipLine (1)
  6786.        IF ZNo THEN _
  6787.           RETURN
  6788.        CALL AllCaps (ZUserIn$)
  6789.        ZReply = (ZReply OR ZUserIn$ = "R")
  6790.        IF ZUserIn$ <> "=" THEN _
  6791.           GOTO 4618
  6792.        CALL SkipLine (1)
  6793.  
  6794. ------------------------[ KG051701 ]-------------------------
  6795.  
  6796. Problem:  When in a subboard, do a V)iew conference, and use
  6797. join suboption to rejoin main, stays inside the subboard.
  6798.  
  6799. Solution:  Change RBBS-PC.BAS as follows:
  6800.  
  6801. 1205 IF ZSubParm < 0 THEN _
  6802.         GOTO 202
  6803.      ZSubParm = 1
  6804.      ZStopInterrupts = ZFalse
  6805.      ZNonStop = (ZPageLength < 1)
  6806.      ZWasQ = 0
  6807.      IF ConfMailJoin OR (ZHomeConf$ <> "" AND ZHomeConf$ <> "MAIN") THEN _ ' TC051701
  6808.         TurboLogon = (NOT ConfMailJoin) : _
  6809.         ConfMailJoin = ZFalse : _
  6810.         ZFF = 8 : _
  6811.         ZUserIn$(2) = ZHomeConf$ : _
  6812.         ZHomeConf$ = "" : _
  6813.         ZWasQ = 1 : _
  6814.         ZAnsIndex = 1 : _
  6815.         ZLastIndex = 2 : _
  6816.         ZStoreParseAt = 1 : _
  6817.         ZLastCommand$ = "MJ" : _                                     ' KG021502
  6818.         GOTO 1240
  6819.      CALL SkipLine (1)
  6820.  
  6821. ------------------------[ KG051601 ]-------------------------
  6822.  
  6823. Problem:  When SysOp declines to leave a comment because it would
  6824. be to same person msg would be from, and then E)nters another
  6825. message, is not prompted for the subject ("comment" is used).
  6826.  
  6827. Change RBBS-PC.BAS as follows:
  6828.  
  6829. 2000 QuotedReply = ZFalse
  6830.      MsgFrom$ = ZActiveUserName$
  6831.      SysopMsg = ZFalse                                               ' MB051601
  6832.  
  6833. ------------------------[ KG051501 ]-------------------------
  6834.  
  6835. Problem:  Some BBS's allow lower case in a msg subject.   When mail from
  6836. them gets added to RBBS, it may remain in lower case.   Then thread
  6837. and text search will not match properly.
  6838.  
  6839. Solution:  Always make the subject upper case when it is read into
  6840. RBBS.   Change RBBS-PC.BAS as follows:
  6841.  
  6842. 8040 IF LEN(MsgTo$) < 23 THEN _
  6843.         MsgTo$ = MsgTo$ + _
  6844.                       SPACE$(23 - LEN(MsgTo$))
  6845.      Subject$ = MID$(ZMsgRec$,76,25)
  6846.      CALL Trim (Subject$)
  6847.      CALL AllCaps (Subject$)                                         ' KG051501
  6848.      OrigSubject$ = Subject$
  6849.      IF ZPswdFailed THEN _
  6850.         Subject$ = WasSJ$
  6851.  
  6852. ------------------------[ KG042501 ]-------------------------
  6853.  
  6854. Problem:  When execute macros with block print to screen that
  6855. has empty lines in it, prompts repeated on the screen and macro
  6856. works irregulary.
  6857.  
  6858. Solution:  Change RBBSSUB5.BAS as follows:
  6859.  
  6860. 63336 GOSUB 63395
  6861.       IF NOT ZMacroActive THEN _
  6862.          ZMacroEcho = ZTrue : _
  6863.          EXIT SUB                                                    ' KG042501
  6864.       IF CompareVar > 0 THEN _
  6865.          IF NOT CaseExecute THEN _
  6866.             IF LEFT$(ZOutTxt$,3) = ZSmartTextCode$+"==" THEN _
  6867.                WasX$ = RIGHT$(ZOutTxt$,LEN(ZOutTxt$)-3) : _          ' KG042501
  6868.                GOTO 63370 _
  6869.             ELSE IF LEFT$(ZOutTxt$,7) = ZSmartTextCode$ + "END ON" THEN _
  6870.                     CompareVar = 0 : _
  6871.                     GOTO 63336 _
  6872.                   ELSE GOTO 63336
  6873.       IF LEN(ZOutTxt$) < 3 THEN _                                    ' KG042501
  6874.          GOTO 63398                                                  ' KG042501
  6875.       WasX$ = RIGHT$(ZOutTxt$,LEN(ZOutTxt$)-3)                       ' KG042501
  6876.       IF LEFT$(ZOutTxt$,1) <> ZSmartTextCode$ THEN _
  6877.          GOTO 63398
  6878.       CALL CheckInt (MID$(ZOutTxt$,2))
  6879.       IF ZErrCode > 0 THEN _
  6880.          GOTO 63398
  6881.             .
  6882.             .
  6883.             .
  6884.  
  6885. ------------------------[ KG041702 ]-------------------------
  6886.  
  6887. Problem:  CONFIG accepts a quote for a command symbol but this
  6888. choice messes up the entire configuration file.
  6889.  
  6890. Solution:  Do not allow quote as a choice.   Change CNFG-SUB.BAS
  6891. as follows:
  6892.  
  6893. 61892 CALL ASKRO("New command for " + _
  6894.                   MID$(COMMANDS$(FF,1),1,INSTR(COMMANDS$(FF,1),"  ")) + _
  6895.                  "is?",24,HK$)
  6896.       IF HK$ = CHR$(34) THEN _                                       ' KG041702
  6897.          GOTO 61892                                                  ' KG041702
  6898.       X$ = MID$(HK$,1,1)
  6899.       CALL ALLCAPS (X$)
  6900.       IF LEN(HK$) > 1 THEN _
  6901.          HK$ = X$ + MID$(HK$,2)
  6902.       IF LEN (HK$) = 1 THEN _
  6903.          HK$ = X$
  6904.       COMMANDS$(FF,2) = HK$
  6905.       MID$(SECTION.COMMANDS$,FF,1) = HK$
  6906.       GOTO 61880
  6907.  
  6908. ------------------------[ KG041701 ]-------------------------
  6909.  
  6910. Problem:  Door may exist but fail to be executed.
  6911.  
  6912. Solution:  Line was left out of a subprogram.  Change RBBSSUB4.BAS
  6913. as follows:
  6914.  
  6915. 59510 ZFileName$ = CurMenu$
  6916.       InMenu = ZTrue                                                 ' KG041701
  6917.       CALL BreakFileName (CurMenu$,MenuDrv$,WasX$,ZWasDF$,ZTrue)
  6918.       MenuFront$ = MenuDrv$ + WasX$
  6919.       CALL Graphic (GRDefault$,ZFileName$)
  6920.       CurMenuVer$ = ZFileName$
  6921.       ZStopInterrupts = ZFalse
  6922.       IF ZAnsIndex < ZLastIndex OR ZExpertUser THEN _
  6923.          GOTO 59520
  6924.  
  6925. ------------------------[ KG041401 ]-------------------------
  6926.  
  6927. Problem:  Possible to get an infinite loop under NetBios.
  6928.  
  6929. Solution:  Caused by trying to unlock a file not locked.  Change
  6930. RBBSSUB1.BAS as follows:
  6931.  
  6932. 29920 ZErrCode = 0
  6933.       IF IBMFileLock = 6 AND IBMRecLock = 3 THEN _
  6934.          IBMCount = IBMCount - 1 : _
  6935.          IF IBMCount > 0 THEN _
  6936.             EXIT SUB _
  6937.          ELSE IBMCount = 0
  6938.       UNLOCK IBMFileLock, IBMRecLock TO IBMRecLock
  6939.       IF ZErrCode = 70 THEN _                                        ' ML041401
  6940.          EXIT SUB                                                    ' ML041401
  6941.       IF ZErrCode <> 0 THEN _
  6942.          GOTO 29920
  6943.       END SUB
  6944.  
  6945. ------------------------[ KG040902 ]-------------------------
  6946.  
  6947. Problem:  When dooring to external protocols that append to the
  6948. log file used by DSZ, the log file can grow rather than contain
  6949. only the latest transfer, causing RBBS to read the wrong entry.
  6950.  
  6951. Solution:   Change RBBSSUB5.BAS as follows:
  6952.  
  6953. 20263 IF ZPrivateDoor THEN _
  6954.          ZCmdTransfer$ = ZWasFT$ : _
  6955.          CALL XferType (2,ZTrue) : _
  6956.          ZCmdTransfer$ = ""
  6957.       CALL OpenWork (2,"XFER-" + ZNodeID$ + ".DEF")
  6958.       IF ZErrCode <> 0 THEN _
  6959.          GOTO 20267
  6960.       CALL ReadParms (ZWorkAra$(), ZFailureParm, 1)
  6961.       IF ZErrCode <> 0 THEN _
  6962.          GOTO 20267
  6963.       CLOSE 2                                                        ' KG040902
  6964.       CALL KillWork ("XFER-" + ZNodeID$ + ".DEF")
  6965.  
  6966. ------------------------[ KG040901 ]-------------------------
  6967.  
  6968. Problem:  If screen happens to fill with msg "Scanning directory...",
  6969. will not pause but scroll lines away.
  6970.  
  6971. Solution:  Change RBBSSUB5.BAS as follows:
  6972.  
  6973. 20120 ZOutTxt$ = "Scanning Directory " + _
  6974.            ZFileNameHold$
  6975.       IF WasRS$ <> "" THEN _
  6976.          ZOutTxt$ = ZOutTxt$ + " for " + WasRS$
  6977.       GOSUB 21650
  6978.       IF ZFileSysParm > 1 THEN _
  6979.          RETURN
  6980.       CALL AskMore ("",ZTrue,ZTrue,ZAnsIndex,ZFalse)                 ' KG040901
  6981.       IF ZNo THEN _                                                  ' KG040901
  6982.          ZErrCode = 0 : _                                            ' KG040901
  6983.          RETURN                                                      ' KG040901
  6984.       WasPG = ZTrue
  6985.  
  6986. ------------------------[ KG032801 ]-------------------------
  6987.  
  6988. Problem:  Documentation says a macro can be executed before any
  6989. file transfer by putting it in PROTO.DEF.   But macro is ignored.
  6990.  
  6991. Solution:  Change RBBSSUB5.BAS as follows:
  6992.  
  6993. 20330 IF ZAutoDownInProgress THEN _
  6994.          RETURN
  6995.       GOSUB 20337                                                    ' KG032801
  6996.       ZOutTxt$ = ZProtoPrompt$ + _
  6997.             " " + WasA1$ + _
  6998.             " of " + _
  6999.             ZFileNameHold$ + _
  7000.             " ready.  <Ctrl X> aborts"
  7001.       GOSUB 21650
  7002.  
  7003. 20337 IF ZProtoMacro$ <> "" THEN _                                   ' KG032801
  7004.          ZGSRAra$(1) = MID$("DU ",ZTransferFunction,1) : _           ' KG032801
  7005.          CALL MacroExe (ZProtoMacro$)                                ' KG032801
  7006.       RETURN                                                         ' KG032801
  7007.  
  7008. 20340 IF ZWasDF THEN _
  7009.          ZOutTxt$ = "Switch to a non-ascii protocol" : _
  7010.          GOSUB 21650 : _
  7011.          GOTO 21700
  7012.       GOSUB 20750
  7013.       IF ZFileSysParm > 1 OR NOT ZOK THEN _
  7014.          RETURN
  7015.       CALL OpenWork (2,ZFileName$)
  7016.       IF (ZAnsIndex = FirstDnld OR NOT ZConcatFIles) THEN _
  7017.          GOSUB 20337 : _                                             ' KG032801
  7018.          ZOutTxt$ = "^X aborts.  ^S suspends ^Q resumes" : _
  7019.          GOSUB 21640 : _
  7020.          IF ZFileSysParm > 1 THEN _
  7021.             RETURN _
  7022.          ELSE ZOutTxt$ = ZProtoPrompt$ + " SEND of " + _
  7023.               ZFileNameHold$ + _
  7024.               " ready. Press Any Key to start" : _
  7025.          ZTurboKey = 2 : _
  7026.          ZForceKeyboard = ZTrue : _
  7027.          ZSuspendAutologoff = ZTrue : _
  7028.          GOSUB 21660 : _
  7029.          ZSuspendAutologoff = ZFalse : _
  7030.          GOSUB 20335 : _
  7031.          IF ZFileSysParm > 1 THEN _
  7032.             RETURN
  7033.  
  7034. 20560 LineACK = (ZDefaultLineACK$ <> "")
  7035.       IF LineACK THEN _
  7036.          ZOutTxt$ = "Acknowledge each line ([Y],N)" : _
  7037.          ZTurboKey = - ZTurboKeyUser : _
  7038.          LineACK = NOT ZNo : _
  7039.          GOSUB 21660 : _
  7040.          IF ZFileSysParm > 1 THEN _
  7041.             RETURN
  7042.       GOSUB 20337                                                    ' KG032801
  7043.       CALL QuickTPut1 ("Transfer MUST end with a <Ctrl-K>")
  7044.       CALL QuickTPut1 (ZProtoPrompt$+" RECEIVE of " + ZFileNameHold$ + " ready")
  7045.       ZOK = ZFalse
  7046.       XOff = ZFalse
  7047.       CALL OpenOutW(ZFileName$)
  7048.       IF ZErrCode <> 0 AND ZErrCode <> 53 THEN _
  7049.          ZWasEL = 20560 : _
  7050.          GOTO 21900
  7051.       GOSUB 20510
  7052.       IF ZFileSysParm > 1 THEN _
  7053.          RETURN
  7054.  
  7055. ------------------------[ KG032601 ]-------------------------
  7056.  
  7057. Problem:   When have a problem reading TRASHCAN file other than
  7058. file not found, such as when TRASHCAN is a dos subdirectory,
  7059. will get untrapped errors when new user tries to log on.
  7060.  
  7061. Solution:  Change RBBS-PC.BAS as follows:
  7062.  
  7063. 12570 Found = ZFalse
  7064.       CALL OpenWork (2,ZTrashcanFile$)
  7065.       IF ZErrCode <> 0 THEN _                                        ' KG032601
  7066.          ZErrCode = 0 : _                                            ' KG032601
  7067.          RETURN                                                      ' KG032601
  7068.  
  7069. ------------------------[ KG032502 ]-------------------------
  7070.  
  7071. Problem:  Any door listed in DOORS.DEF should be executable if
  7072. caller has sufficient security.   But only SysOp can executed
  7073. doors not listed on the menu.
  7074.  
  7075. Solution:  To allow "hidden" doors, change RBBS-PC.BAS as
  7076. follows:
  7077.  
  7078. 821 IF ZExitToDoors THEN _
  7079.        IF ZTransferFunction = 3 THEN _
  7080.           ZNewUser = ZTrue : _
  7081.           TurboLogon = ZFalse : _
  7082.           SameUser = ZFalse : _
  7083.           ZTransferFunction = 0 : _
  7084.           GOTO 832 _
  7085.        ELSE GOTO 832
  7086.     GOSUB 1241
  7087.     IF (SubBoard AND (ZOrigMsgFile$ = ZActiveMessageFile$)) _
  7088.        OR ((ZUserSecLevel > ZMaxRegSec) AND (NOT ZNewUser)) THEN _
  7089.        GOTO 832
  7090.     ZWasZ$ = ZRegProgram$
  7091.     ZTransferFunction = 3
  7092.     CALL DoorExit (ZFalse)                                           ' KG032502
  7093.     ZTransferFunction = 0
  7094.     GOTO 832
  7095.  
  7096. 1401 ZStackC = ZTrue
  7097.      CALL SubMenu ("Which questionnaire(s), L)ist" + ZPressEnterExpert$, _
  7098.         WasA1$,ZQuesPath$,".DEF","",ZUserGraphicDefault$,ZTrue,ZFalse,ZTrue,"",WasX) ' KG032502
  7099.      IF ZWasQ = 0 THEN _
  7100.         RETURN
  7101.      IF ZSubParm = -1 THEN _
  7102.         RETURN 10595
  7103.      QuestHold$ = ZWasZ$
  7104.      GOSUB 11520
  7105.      CLOSE 2
  7106.      CALL UpdtCalr (QuestHold$ + " questionnaire " + _
  7107.         MID$("answeredaborted",1 - 8 * ZQuestAborted,8),2)
  7108.      IF ReturnToPrompt THEN _
  7109.         RETURN
  7110.      GOTO 1401
  7111.  
  7112. 5301 ZStackC = ZTrue
  7113.      CALL SubMenu ("What conference, L)ist, M)ain ([ENTER] quits)",_
  7114.          WasA1$,MsgDrvPath$,_
  7115.          "M.DEF","M",ZUserGraphicDefault$,ZTrue,ZFalse,ZFalse,"C.DEF",WasX) ' KG032502
  7116.      IF ZWasQ = 0 THEN _
  7117.         RETURN
  7118.      IF ZSubParm = -1 THEN _
  7119.         RETURN 10595
  7120.  
  7121. 9701 CALL SubMenu ("Read what bulletin(s), L)ist, S)ince, N)ews ([ENTER] = none)",_
  7122.                    WasA1$, ZBulletinPrefix$,"",ReturnOn$,_
  7123.                    ZUserGraphicDefault$,ZFalse,ZFalse,ZFalse,"",WasX) ' KG032502
  7124.      IF ZWasQ = 0 THEN _
  7125.         RETURN
  7126.      CALL CheckCarrier
  7127.      IF ZSubParm = -1 THEN _
  7128.         RETURN 10595
  7129.      IF (ZWasZ$ = "*" OR ZWasZ$ = "S") THEN _
  7130.         ZPrevPrefix$ = "" : _
  7131.         GOTO 9760
  7132.      ZStopInterrupts = ZFalse
  7133.      IF ZWasZ$ = "N" THEN _
  7134.         GOSUB 1242 : _
  7135.         IF WasZ <> 0 THEN _
  7136.            CALL QuickTPut1 ("No NEWS available") : _
  7137.            GOTO 9701 _
  7138.         ELSE GOTO 9703
  7139.      CALL BufFile (ZFileName$,ZAnsIndex)
  7140.  
  7141. 10974 WasA1$ = ZMenu$(5)
  7142.       CALL Talk (5,ZOutTxt$)
  7143.       ZStackC = ZTrue
  7144.       CALL SubMenu ("Open which door, L)ist" + ZPressEnterExpert$, _
  7145.                     WasA1$,"",".BAT","",_
  7146.                     ZUserGraphicDefault$,ZTrue,ZFalse,ZFalse,"",InMenu) ' KG032502
  7147.       IF ZWasQ = 0 THEN _
  7148.          RETURN
  7149.       IF ZSubParm = -1 THEN _
  7150.          RETURN 10595
  7151.  
  7152. 10986 ZWasZ$ = ZFileName$
  7153.       CALL DoorExit (NOT InMenu)                                     ' KG032502
  7154.       GOTO 10974                                                     ' KG032502
  7155.  
  7156. Change RBBSSUB2.BAS as follows:
  7157.  
  7158. (line 10983)
  7159.  
  7160.       SUB DoorExit (ReqDoorsDef) STATIC                              ' KG032502
  7161.       IF ZWasZ$ = "" OR _
  7162.          ZWasZ$ = "NONE" THEN _
  7163.          EXIT SUB
  7164.       CALL FindIt (ZWasZ$)
  7165.       IF NOT ZOK THEN _
  7166.          GOTO 10986
  7167.       CALL BreakFileName (ZWasZ$,WasX$,ExitTo$,ExitMethod$,ZFalse)   ' KG032501
  7168.       ExitMethod$ = ""
  7169.       ZDooredTo$ = ExitTo$
  7170.       CALL FindIt (ZDoorsDef$)
  7171.       IF NOT ZOK THEN _
  7172.          IF ReqDoorsDef THEN _                                       ' KG032502
  7173.             EXIT SUB _                                               ' KG032502
  7174.          ELSE ExitTo$ = ExitTo$ + " " + ZNodeID$ : _                 ' KG032502
  7175.               GOTO 10989                                             ' KG032502
  7176. 10985 CALL ReadParms (ZOutTxt$(),8,1)
  7177.       IF ZErrCode > 0 THEN _
  7178.          IF ReqDoorsDef THEN _                                       ' KG032502
  7179.             EXIT SUB _                                               ' KG032502
  7180.          ELSE ExitTo$ = ExitTo$ + " " + ZNodeID$ : _                 ' KG032502
  7181.               GOTO 10989                                             ' KG032502
  7182.       IF ExitTo$ <> ZOutTxt$(1) THEN _
  7183.          GOTO 10985
  7184.       CALL CheckInt (ZOutTxt$(2))
  7185.       IF ZErrCode > 0 THEN _
  7186.          ZErrCode = 0 : _
  7187.          GOTO 10985
  7188.       IF ZUserSecLevel < ZTestedIntValue THEN _
  7189.          CALL QuickTPut1 ("Insufficient security for door") : _
  7190.          EXIT SUB
  7191.       WasX$ = LEFT$(ZOutTxt$(5),INSTR(ZOutTxt$(5)+" "," ")-1)
  7192.       CALL FindIt (WasX$)
  7193.       IF NOT ZOK THEN _
  7194.          GOTO 10986
  7195.       ZFileName$ = ZOutTxt$(3)
  7196.       ExitMethod$ = ZOutTxt$(4)
  7197.       ExitTemplate$ = ZOutTxt$(5)
  7198.       ZDoorDisplay$ = ZOutTxt$(7)
  7199.       DoorTime$ = ZOutTxt$(8)
  7200.       CALL AskUsers
  7201.       CALL SmartText (ExitTemplate$,ZFalse,ZFalse)
  7202.       CALL MetaGSR (ExitTemplate$,ZFalse)
  7203.       ExitTo$ = ExitTemplate$
  7204.       GOTO 10989
  7205.  
  7206. Change RBBSSUB4.BAS as follows:
  7207.  
  7208. (line 59500)
  7209.  
  7210.       SUB SubMenu (PassedPrompt$,CurMenu$,FrontOpt$, _
  7211.                   BackOpt$,ReturnOn$,GRDefault$,VerifyInMenu, _
  7212.                   AllMenuOK,RequireInMenu,BackOpt2$,InMenu) STATIC   ' KG032502
  7213.  
  7214. 59538 FilName$ = FPre$ + ZWasZ$
  7215.       CALL BadFile (FilName$,WasBF)
  7216.       IF WasBF > 1 THEN _
  7217.          ZOK = ZFalse : _
  7218.          RETURN
  7219.       ZFileName$ = FilName$ + _
  7220.                    BackOpt$
  7221.       CALL Graphic (GRDefault$,ZFileName$)
  7222.       IF NOT ZOK THEN _
  7223.          IF BackOpt2$ <> "" THEN _
  7224.             ZFileName$ = FilName$ + _
  7225.                          BackOpt2$ : _
  7226.             CALL Graphic (GRDefault$,ZFileName$)
  7227.       IF ZOK THEN _
  7228.          IF ZSysop OR (NOT RequireInMenu) THEN _
  7229.             RETURN _
  7230.          ELSE CALL WordInFile (CurMenu$,ZWasZ$,InMenu) : _           ' KG032502
  7231.               IF InMenu THEN _                                       ' KG032502
  7232.                  RETURN _
  7233.               ELSE GOTO 59540
  7234.       IF (NOT VerifyInMenu) THEN _
  7235.          GOTO 59540
  7236.       CALL WordInFile (CurMenu$,ZWasZ$,InMenu)  'verify against menu itself ' KG032502
  7237.       IF InMenu THEN _                                               ' KG032502
  7238.          IF AllMenuOK THEN _
  7239.             RETURN
  7240. 59540 WasX$ = FPre$ + _
  7241.            ZWasZ$ + _
  7242.            ".MNU" 'check whether option is a menu
  7243.       ZFileName$ = WasX$
  7244.       CALL Graphic (GRDefault$,ZFileName$)
  7245.       IF ZOK THEN _
  7246.          NewMenu = ZTrue : _
  7247.          CurMenuVer$ = ZFileName$ : _
  7248.          CurMenu$ = WasX$ : _
  7249.          CALL BreakFileName (CurMenu$,MenuDrv$,WasX$,ZWasDF$,ZTrue) : _
  7250.          MenuFront$ = MenuDrv$ + WasX$ : _
  7251.          RETURN
  7252.       IF VerifyInMenu AND InMenu AND NOT RequireInMenu THEN _        ' KG032502
  7253.          CALL UpdtCalr("Option " + ZWasZ$ + " on menu " + _
  7254.                        CurMenu$ + " but not found",1)
  7255.       RETURN
  7256.  
  7257. ------------------------[ KG032501 ]-------------------------
  7258.  
  7259. Problem:  When put registration door control in DOORS.DEF, it
  7260. is being ignored.
  7261.  
  7262. Solution:  Change RBBSSUB2.BAS as follows:
  7263.  
  7264. (line 10983)
  7265.  
  7266.       SUB DoorExit STATIC
  7267.       IF ZWasZ$ = "" OR _
  7268.          ZWasZ$ = "NONE" THEN _
  7269.          EXIT SUB
  7270.       CALL FindIt (ZWasZ$)
  7271.       IF NOT ZOK THEN _
  7272.          GOTO 10986
  7273.       CALL BreakFileName (ZWasZ$,WasX$,ExitTo$,ExitMethod$,ZFalse)   ' KG032501
  7274.       ExitMethod$ = ""
  7275.          .
  7276.          .
  7277.          .
  7278.  
  7279. ------------------------[ KG031801 ]-------------------------
  7280.  
  7281. Problem:  When has main and auxiliary FMS directories, and list an
  7282. auxiliary, abort, then list main, get auxiliary instead.
  7283.  
  7284. Solution:  Change RBBSSUB3.BAS as follows:
  7285.  
  7286. 58183 CLOSE 2
  7287.       ZNonStop = (ZPageLength < 1)
  7288.       ZStopInterrupts = ZFalse
  7289.       ZOutTxt$ = ""
  7290.       ZActiveFMSDir$ = ""                                            ' KG031801
  7291.       ZJumpSupported = ZFalse
  7292.       EXIT SUB
  7293.  
  7294. ------------------------[ KG031501 ]-------------------------
  7295.  
  7296. Problem:  Sometimes get endless looping where keeps trying to download
  7297. same file after upload is aborted.
  7298.  
  7299. Solution:  Change RBBSSUB5.BAS as follows:
  7300.  
  7301. 20735 CALL KillWork (ZFileName$)
  7302.       IF ZErrCode <>0 THEN _
  7303.          ZWasEL = 20736 : _
  7304.          GOTO 21900
  7305.       ZAnsIndex = ZLastIndex + 1                                     ' KG031501
  7306.       ZLastIndex = 0
  7307.       RETURN
  7308.  
  7309. ------------------------[ KK030901 ]-------------------------
  7310.  
  7311. Problem:  Possible to get untrapped overflow error in intermediate
  7312. variables in an integer calculation.
  7313.  
  7314. Solution:  Change RBBS-PC.BAS as follows:
  7315.  
  7316. 135 IF ZCurDef$ = ZOrigCnfg$ THEN _
  7317.        ZActiveMessageFile$ = ZMainMsgFile$ : _
  7318.        ZActiveUserFile$ = ZMainUserFile$
  7319.     GOSUB 4910
  7320.     IF ZConfMode THEN _
  7321.        GOTO 150
  7322.     ZLocalUserMode = (RIGHT$(ZComPort$,1) < "1")
  7323.     GET 1,ZNodeRecIndex
  7324.     ZWasY$ = MID$(ZMsgRec$,77,2)
  7325.     CALL UnPackDate (ZWasY$,WasX,WasL,WasI,ZOldDate$)
  7326.     ZOldDate$ = LEFT$(ZOldDate$,6) + MID$(STR$(WasX),2)
  7327.     ZHourMinToDropToDos = - (ZHourMinToDropToDos > 0) * ZHourMinToDropToDos
  7328.     Hour = INT(ZHourMinToDropToDos / 100)
  7329.     WasMN = ZHourMinToDropToDos - Hour * 100
  7330.     ZTimeToDropToDos! = Hour * 3600! + WasMN * 60!                   ' KK030901
  7331.  
  7332. 175 GOSUB 5344
  7333.     CALL CountLines (MaxEntries)
  7334.     REDIM ZCategoryName$(MaxEntries),ZCategoryCode$(MaxEntries),_
  7335.           ZCategoryDesc$(MaxEntries) : _
  7336.     CALL InitFMS (ZCategoryName$(),ZCategoryCode$(), _
  7337.                   ZCategoryDesc$(),ZNumCategories)
  7338.     ZMaxMsgLines = ZMaxMsgLinesDef
  7339.     ZLocalUser = (ZLocalUser OR ZLocalUserMode)
  7340.     IF (NOT ZLocalUser) AND (NOT SubBoard) THEN _
  7341.        CALL OpenCom (ZModemInitBaud$,",N,8,1")
  7342.     IF NOT SubBoard THEN _
  7343.        CALL SetEcho (ZDefaultEchoer$)
  7344.     ZNodeWorkFile$ = ZNodeWorkDrvPath$ + _
  7345.                       "NODE" + _
  7346.                       ZNodeFileID$ + _
  7347.                       "WRK"
  7348.     ZSecsPerSession! = ZMinsPerSession * 60!                         ' KK030901
  7349.     IF NOT ZLocalUserMode THEN _
  7350.        IF NOT ZExitToDoors THEN _
  7351.           GOTO 180 _
  7352.        ELSE IF NOT ZLocalUser THEN _
  7353.                GOTO 180
  7354.     ZLocalUser = ZTrue
  7355.     ZBPS = -6
  7356.     ZBaudTest! = 9600
  7357.     ZEightBit = ZTrue
  7358.     ZSnoop = ZTrue
  7359.     IF ZExitToDoors THEN _
  7360.        CALL AMorPM : _
  7361.        CALL ReadProf : _
  7362.        GOTO 410
  7363.     GOSUB 178
  7364.     GOTO 345
  7365.  
  7366. 459 GOSUB 9500
  7367.     ZLastDateTimeOnSave$ = ZLastDateTimeOn$
  7368.     IF ZExitToDoors THEN _
  7369.        TempHoldTime! = VAL(LEFT$(ZTime$,2))*3600! + _                ' KK030901
  7370.                          VAL(MID$(ZTime$,4,2))*60! : _               ' KK030901
  7371.        CALL CheckTime(TempHoldTime!, TempTime!, 2) : _
  7372.        MinsInDoors = TempTime! / 60 : _
  7373.        CALL TimeRemain (MinsRemaining)
  7374.     ZUserFileIndex = LOC(5)
  7375.     GOSUB 5135
  7376. '
  7377. ' ***  COMPUTE THE NUMBER OF DAYS REMAINING UNTIL REGISTRATION EXPIRES **
  7378. '
  7379.     IF ZRestrictByDate AND ZDaysInRegPeriod > 0 THEN _
  7380.        CALL CompDate (UserRegYY,UserRegMM,UserRegDD,UserComputeDate!) : _
  7381.        ZRegDaysRemaining = UserComputeDate! + _
  7382.                             ZDaysInRegPeriod - _
  7383.                             TodayComputeDate! : _
  7384.        CALL ExpireDate (UserComputeDate!,ZDaysInRegPeriod,ZExpirationDate$) _
  7385.     ELSE ZDaysInRegPeriod = 0
  7386.     IF NOT ZPrivateDoor THEN _
  7387.        IF ZRegDaysRemaining < 0 AND ZDaysInRegPeriod > 0 THEN _
  7388.        IF ZUserSecLevel > ZExpiredSec THEN _
  7389.           CALL QuickTPut1 (ZWasLG$(9) + _
  7390.                       " - security reset to " + _
  7391.                       STR$(ZExpiredSec)) : _
  7392.           CALL BufFile(ZHelpPath$+"RGXPIRD"+ZHelpExtension$,WasX) : _
  7393.           ZLogonErrorIndex = 9 : _
  7394.           ZUserSecLevel = ZExpiredSec : _
  7395.           LSET ZSecLevel$ = MKI$(ZUserSecLevel) : _
  7396.           GOSUB 5135
  7397.  
  7398. Change RBBSSUB3.BAS as follows:
  7399.  
  7400. (line 44000)
  7401.  
  7402.       SUB ReadProf STATIC
  7403.       FIELD 1, 128 AS ZMsgRec$
  7404.       GET 1,ZNodeRecIndex
  7405.       ZReliableMode = VAL(MID$(ZMsgRec$,91,2))
  7406.       MID$(ZMsgRec$,40,2) = "00"
  7407.       ZEightBit = VAL(MID$(ZMsgRec$,42,2))
  7408.       ZBPS = VAL(MID$(ZMsgRec$,44,2))
  7409.       CALL CommInfo
  7410.       ZBaudTest! = VAL(MID$(ZBaudRates$,(-5 * ZBPS),5))
  7411.       ZUpperCase = VAL(MID$(ZMsgRec$,46,2))
  7412.       ZNumDnldBytes! = CVS(MID$(ZMsgRec$,48,4))                      ' KG022101
  7413.       ZBatchTransfer = (MID$(ZMsgRec$,52,1) = "1")
  7414.       ZWasGR = VAL(MID$(ZMsgRec$,53,2))
  7415.       HourLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,65,1))),2),2)
  7416.       MinLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,66,1))),2),2)
  7417.       SecLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,67,1))),2),2)
  7418.       ZTimeLoggedOn$ = HourLoggedOn$ + _
  7419.                         ":" + _
  7420.                         MinLoggedOn$ + _
  7421.                         ":" + _
  7422.                         SecLoggedOn$
  7423.       ZTransferFunction = VAL(MID$(ZMsgRec$,74,1))
  7424.       ZWasFT$ = MID$(ZMsgRec$,75,1)
  7425.       ZTimeCredits! = 60!*CVI(MID$(ZMsgRec$,113,2))                  ' KKG030901
  7426.       ZDooredTo$ = MID$(ZMsgRec$,79,8)
  7427.       CALL Trim (ZDooredTo$)
  7428.           .
  7429.           .
  7430.           .
  7431.  
  7432. 44003 ZUserLogonTime! = VAL(HourLoggedOn$) * 3600! + _               ' KK030901
  7433.                         VAL(MinLoggedOn$) * 60! + _                  ' KK030901
  7434.                         VAL(SecLoggedOn$)
  7435.       HourLoggedOn$ = ""
  7436.       MinLoggedOn$ = ""
  7437.       SecLoggedOn$ = ""
  7438.       IF ZMinsPerSession < 1 THEN _
  7439.          ZMinsPerSession = 3
  7440.       IF NOT ZEightBit THEN _
  7441.          OUT ZLineCntlReg,&H1A
  7442.       IF LEFT$(ZMsgRec$,7) = "SYSOP  " THEN _
  7443.          ZFirstName$ = ZSysopPswd1$ : _
  7444.          ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
  7445.       ELSE ZFirstNameEnd = INSTR(ZMsgRec$," ") : _
  7446.            ZLastNameEnd = INSTR(ZFirstNameEnd + 1,ZMsgRec$ + " ","  ") : _
  7447.            ZFirstName$ = LEFT$(ZMsgRec$,ZFirstNameEnd-1) : _
  7448.            ZLastName$ = MID$(ZMsgRec$,ZFirstNameEnd + 1,ZLastNameEnd - (ZFirstNameEnd + 1)) : _
  7449.            ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
  7450.       ZWasZ$ = ZFirstName$
  7451.       CALL OpenWork (2,ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
  7452.       CALL ReadDir (2,1)
  7453.       ZLimitMinsPerSession = VAL (ZOutTxt$)
  7454.       CLOSE 2
  7455.       END SUB
  7456.  
  7457. (line 58140)
  7458.  
  7459.       SUB LoadNew (Ara(2)) STATIC
  7460.       IF ZFMSDirectory$ = "" THEN _
  7461.          EXIT SUB
  7462.       ZPrevBase$ = ""
  7463.       IF PrevLoadNew$ = ZFMSDirectory$ THEN _
  7464.          Ara(1,1) = 0 : _
  7465.          EXIT SUB
  7466.       PrevLoadNew$ = ZFMSDirectory$
  7467.       CALL OpenFMS (LastRec)
  7468.       FIELD 2, 23 AS PreDate$, _
  7469.                 2 AS WasMM$, _
  7470.                 1 AS Fill1$, _
  7471.                 2 AS WasDD$, _
  7472.                 1 AS Fill2$, _
  7473.                 2 AS Year$, _
  7474.                 (2 + ZMaxDescLen) AS Fill3$, _
  7475.                 3 AS Category$, _
  7476.                 2 AS Fill4$
  7477.       MaxRecs = UBOUND(Ara,1)
  7478.       IF MaxRecs < 1 THEN _
  7479.          MaxRecs = 1 _
  7480.       ELSE IF MaxRecs > 23 THEN _
  7481.               MaxRecs = 23
  7482.       WasL = 0
  7483.       WasK = LastRec
  7484.       WHILE WasK > 0 AND WasL < MaxRecs
  7485.          GET #2,WasK
  7486.          IF INSTR("\= ",LEFT$(PreDate$,1)) > 0 THEN _
  7487.             GOTO 58142
  7488.          IF (ZCanDnldFromUp OR Category$ <> ZDefaultCatCode$) THEN _
  7489.             WasL = WasL + 1 : _
  7490.             Ara(WasL,1) = 372! * (VAL(Year$) - 80!) + 31! * VAL(WasMM$) + VAL(WasDD$) ' KK030901
  7491.          IF NOT ZCanDnldFromUp THEN _
  7492.             WasX = ZMinSecToView _
  7493.          ELSE IF Category$ = "***" THEN _
  7494.                  WasX = ZSysopSecLevel _
  7495.               ELSE IF Category$ = ZDefaultCatCode$ THEN _
  7496.                       WasX = ZMinSecToView _
  7497.                    ELSE WasX = ZOptSec(19)
  7498.          Ara(WasL,2) = WasX
  7499.  
  7500. ------------------------[ KG030801 ]-------------------------
  7501.  
  7502. Problem:  When screen pauses in midst of personal mail scan, will no
  7503. longer show rest of mail scan on the screen.
  7504.  
  7505. Solution:  Change RBBS-PC.BAS as follows:
  7506.  
  7507. 1900 GOSUB 5344
  7508.      IF ZPrivateDoor THEN _
  7509.         ActionFlag = ZTrue
  7510.      ZPrevBase$ = ZActiveMessageFile$
  7511.      ShowActive = ZFalse
  7512.      IF NOT ActionFlag THEN _
  7513.         CALL QuickTPut ("Checking messages in " + ConfFileName$,0) : _
  7514.         ShowActive = ZTrue _
  7515.      ELSE CALL QuickTPut ("Loading messages",0)
  7516.      WasA1$ = ""                                                     ' KG030801
  7517.      MsgCt = 0                                                       ' KG030203
  7518.      MsgsFromUser = ZFalse
  7519.      ActiveMessages = 0
  7520.      MailReported = ActionFlag
  7521.      FirstOld = ZTrue
  7522.      GOSUB 23000
  7523.      MsgRec = FirstMsgRecord
  7524.      MaxMsgs = VAL(MID$(ZMsgRec$,89,7))
  7525.      IF MaxMsgs > WasMM THEN _
  7526.         MaxMsgs = WasMM
  7527.      REDIM ZMsgPtr(MaxMsgs,2)
  7528.      NumDots = 0
  7529.  
  7530. 1940 IF MsgsFromUser < ZMsgDim THEN _
  7531.         MsgsFromUser = MsgsFromUser + 1 : _
  7532.         WasA1$ = WasA1$ + LEFT$(ZMsgRec$,5)                          ' KG030801
  7533.  
  7534. 1960 WasK = 1
  7535.      FOR MsgCt = 1 TO MsgsFromUser                                   ' KG030203
  7536.         ZOutTxt$ = MID$(WasA1$,WasK,5)                               ' KG030801
  7537.         WasK = WasK + 5
  7538.         GOSUB 12978
  7539.         IF MsgCt MOD 15 = 0 THEN _                                   ' KG030203
  7540.            CALL SkipLine (1) : _                                     ' KG030203
  7541.            CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                  ' KG030203
  7542.      NEXT
  7543.      WasA1$ = ""                                                     ' KG030801
  7544.      CALL SkipLine (1)
  7545.      CALL QuickTPut1 ("Please K)ill old/unneeded msgs")
  7546.  
  7547. ------------------------[ KG030601 ]-------------------------
  7548.  
  7549. Problem:  Sometimes RBBS will get in a state where it constantly
  7550. recycles.   Callers file says "Connect Timeout".
  7551.  
  7552. Solution:  Caused usually by storing a telephone number in place of
  7553. where from, or by failing to give password right in local mode, then
  7554. bringing up remotely.   Change RBBS-PC.BAS as follows:
  7555.  
  7556. 150 IF SubBoard THEN _
  7557.        GOSUB 12987 : _
  7558.        GOSUB 5135 : _
  7559.        GOTO 170
  7560.     ZSysopAvail = VAL(MID$(ZMsgRec$,32,2))
  7561.     ZSysopAnnoy = VAL(MID$(ZMsgRec$,34,2))
  7562.     ZSysopNext = VAL(MID$(ZMsgRec$,36,2))
  7563.     MID$(ZMsgRec$,36,2) = STR$(ZFalse)
  7564.     ZPrinter = VAL(MID$(ZMsgRec$,38,2))
  7565.     IF ZTurnPrinterOff THEN _
  7566.        ZPrinter = ZFalse
  7567.     ZExitToDoors = (MID$(ZMsgRec$,40,2) = "-1" AND ZNetBaud$ = "")
  7568.     ZEightBit = VAL(MID$(ZMsgRec$,42,2))
  7569.     ZBPS = VAL(MID$(ZMsgRec$,44,2))
  7570.     ZSnoop = VAL(MID$(ZMsgRec$,58,2))
  7571.     MID$(ZMsgRec$,57,1) = "I"
  7572.     ZPrivateDoor = (MID$(ZMsgRec$,72,2) = "-1")
  7573.     IF ZPrivateDoor THEN _
  7574.        ZHasPrivDoor = ZTrue
  7575.     MID$(ZMsgRec$,72,2) = STR$(ZFalse)
  7576.     ZLocalUser = (MID$(ZMsgRec$,101,2) = ZCarriageReturn$+ZCarriageReturn$) ' KG030601
  7577.     IF ZExitToDoors OR ZPrivateDoor THEN _
  7578.        ZHasDoored = ZTrue : _
  7579.        TurboLogon = ZTrue
  7580.     PUT 1,ZNodeRecIndex
  7581.     GOSUB 12985
  7582. '
  7583. ' *****  INITIALIZE VOICE SYNTHESIZER   ****
  7584. '
  7585.     CALL Talk (Init,ZOutTxt$)
  7586. '
  7587. ' *****  TEST FOR MULTI LINK PRESENT IF NOT COMPAQ COMPUTER   ****
  7588. '
  7589.  
  7590. 13555 ZActiveMessageFile$ = ZOrigMsgFile$
  7591.       GOSUB 12986
  7592.       GOSUB 5344
  7593.       GET 1,ZNodeRecIndex
  7594.       MID$(ZMsgRec$,57,1) = "I"
  7595.       MID$(ZMsgRec$,40,2) = " 0"
  7596.       MID$(ZMsgRec$,72,2) = " 0"
  7597.       IF MID$(ZMsgRec$,101,2) = ZCarriageReturn$+ZCarriageReturn$ THEN _ ' KG030602
  7598.          MID$(ZMsgRec$,101,2) = " 0"                                 ' KG030602
  7599.       PUT 1,ZNodeRecIndex
  7600.       GOSUB 12985
  7601.       CLOSE 1,2,4,5
  7602.       IF NOT ZFossil THEN _
  7603.          CLOSE 3
  7604.       IF ZRecycleToDos THEN _
  7605.          GOTO 203
  7606.       RUN 100
  7607.  
  7608. Change RBBSSUB3.BAS as follows:
  7609.  
  7610. 43070 ZActiveMessageFile$ = ZOrigMsgFile$
  7611.       ZSubParm = 3
  7612.       CALL FileLock
  7613.       CALL OpenMsg
  7614.       FIELD 1, 128 AS ZMsgRec$
  7615.       GET 1,ZNodeRecIndex
  7616.       IF ZGlobalSysop THEN _
  7617.          MID$(ZMsgRec$,1,30) = "SYSOP" + SPACE$(25)
  7618.       MID$(ZMsgRec$,40,2) = STR$(ZExitToDoors)
  7619.       MID$(ZMsgRec$,42,2) = STR$(ZEightBit)
  7620.       MID$(ZMsgRec$,44,2) = STR$(ZBPS)
  7621.       MID$(ZMsgRec$,46,2) = STR$(ZUpperCase)
  7622.       MID$(ZMsgRec$,48,5) = MKS$(ZNumDnldBytes!) + MID$(STR$(-ZBatchTransfer),2) ' KG022101
  7623.       MID$(ZMsgRec$,53,2) = STR$(ZWasGR)
  7624.       MID$(ZMsgRec$,55,2) = STR$(ZSysop)
  7625.       MID$(ZMsgRec$,65,3) = CHR$(VAL(LEFT$(ZTimeLoggedOn$,2))) + _
  7626.                                    CHR$(VAL(MID$(ZTimeLoggedOn$,4,2))) + _
  7627.                                    CHR$(VAL(MID$(ZTimeLoggedOn$,7,2)))
  7628.       MID$(ZMsgRec$,72,2) = STR$(ZPrivateDoor)
  7629.       MID$(ZMsgRec$,74,1) = MID$(STR$(ZTransferFunction),2,1)
  7630.       MID$(ZMsgRec$,75,1) = ZWasFT$
  7631.       MID$(ZMsgRec$,113,2) = MKI$(CINT(ZTimeCredits!)/60)
  7632.       MID$(ZMsgRec$,79,8) = LEFT$(ZDooredTo$+"        ",8)
  7633.       MID$(ZMsgRec$,91,2) = STR$(ZReliableMode)
  7634.       CALL BreakFileName (ZCurPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZFalse)
  7635.       MID$(ZMsgRec$,93,8) = ZUserIn$ + SPACE$(8 - LEN(ZUserIn$))
  7636.       IF ZLocalUser THEN _
  7637.          ZWasZ$ = ZCarriageReturn$ + ZCarriageReturn$ _              ' KG030601
  7638.       ELSE ZWasZ$ = " 0"                                             ' KG030601
  7639.       MID$(ZMsgRec$,101,2) = ZWasZ$                                  ' KG030601
  7640.       MID$(ZMsgRec$,103,2) = STR$(ZLocalUserMode)                    ' KG030601
  7641.       ZConfName$ = LEFT$(ZConfName$,INSTR(ZConfName$ + " "," ") - 1)
  7642.       MID$(ZMsgRec$,105,8) = ZConfName$ + SPACE$(8 - LEN(ZConfName$))
  7643.       MID$(ZMsgRec$,115,1) = MID$(STR$(ZAutoLogoffReq),2,1)
  7644.       MID$(ZMsgRec$,117,2) = STR$(ZMenuIndex)
  7645.       MID$(ZMsgRec$,119,2) = LEFT$(DATE$,2)
  7646.       MID$(ZMsgRec$,121,2) = MID$(DATE$,4,2)
  7647.       MID$(ZMsgRec$,123,2) = RIGHT$(DATE$,2)
  7648.       MID$(ZMsgRec$,125,2) = LEFT$(TIME$,2)
  7649.       MID$(ZMsgRec$,127,2) = MID$(TIME$,4,2)
  7650. ' ***   Save additional parameters for door restoral
  7651.       CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
  7652.       CALL PrintWorkA (STR$(ZLimitMinsPerSession))
  7653.       CLOSE 2
  7654.  
  7655. (line 44000)
  7656.  
  7657.       SUB ReadProf STATIC
  7658.       FIELD 1, 128 AS ZMsgRec$
  7659.       GET 1,ZNodeRecIndex
  7660.       ZReliableMode = VAL(MID$(ZMsgRec$,91,2))
  7661.       MID$(ZMsgRec$,40,2) = "00"
  7662.       ZEightBit = VAL(MID$(ZMsgRec$,42,2))
  7663.       ZBPS = VAL(MID$(ZMsgRec$,44,2))
  7664.       CALL CommInfo
  7665.       ZBaudTest! = VAL(MID$(ZBaudRates$,(-5 * ZBPS),5))
  7666.       ZUpperCase = VAL(MID$(ZMsgRec$,46,2))
  7667.       ZNumDnldBytes! = CVS(MID$(ZMsgRec$,48,4))                      ' KG022101
  7668.       ZBatchTransfer = (MID$(ZMsgRec$,52,1) = "1")
  7669.       ZWasGR = VAL(MID$(ZMsgRec$,53,2))
  7670.       HourLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,65,1))),2),2)
  7671.       MinLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,66,1))),2),2)
  7672.       SecLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,67,1))),2),2)
  7673.       ZTimeLoggedOn$ = HourLoggedOn$ + _
  7674.                         ":" + _
  7675.                         MinLoggedOn$ + _
  7676.                         ":" + _
  7677.                         SecLoggedOn$
  7678.       ZTransferFunction = VAL(MID$(ZMsgRec$,74,1))
  7679.       ZWasFT$ = MID$(ZMsgRec$,75,1)
  7680.       ZTimeCredits! = 60*CVI(MID$(ZMsgRec$,113,2))
  7681.       ZDooredTo$ = MID$(ZMsgRec$,79,8)
  7682.       CALL Trim (ZDooredTo$)
  7683.       IF ZExitToDoors AND ZDooredTo$ <> "" THEN _
  7684.          CALL OpenWork (2,ZDoorsDef$) : _
  7685.          IF ZErrCode = 0 THEN _
  7686.             CALL ReadParms (ZOutTxt$(),8,1) : _
  7687.             WHILE ZErrCode = 0 AND ZOutTxt$(1) <> ZDooredTo$ : _
  7688.                CALL ReadParms (ZOutTxt$(),8,1) : _
  7689.             WEND : _
  7690.             IF ZOutTxt$(1) = ZDooredTo$ THEN _
  7691.                ZDoorSkipsPswd = (ZOutTxt$(6) <> "Y") : _
  7692.                CALL BufFile (ZOutTxt$(7),WasX)
  7693.       ZErrCode = 0
  7694.       ZMenuIndex = VAL(MID$(ZMsgRec$,117,2))
  7695.       ZCurPUI$ = MID$(ZMsgRec$,93,8)
  7696.       CALL Remove (ZCurPUI$," ")
  7697.       IF ZCurPUI$ <> "" THEN _
  7698.          CALL BreakFileName (ZMainPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZTrue) : _
  7699.          ZCurPUI$ = ZOutTxt$ + ZCurPUI$ + ZWasZ$
  7700.       ZCustomPUI = (ZCurPUI$ <> "")
  7701.       ZLocalUser = (MID$(ZMsgRec$,101,2) = ZCarriageReturn$ + ZCarriageReturn$) ' KG030601
  7702.       ZLocalUserMode = VAL(MID$(ZMsgRec$,103,2))
  7703.       ZHomeConf$ = MID$(ZMsgRec$,105,8)
  7704.       ZAutoLogoffReq = (VAL(MID$(ZMsgRec$,115,1)) <> 0)
  7705.       CALL Trim (ZHomeConf$)
  7706.       IF ZRequiredRings > 0 AND _
  7707.          INSTR(ZModemInitCmd$,"S0=255") THEN _
  7708.          COLOR 7,0,0 _
  7709.       ELSE COLOR ZFG,ZBG,ZBorder
  7710.       IF ZLocalUserMode THEN _
  7711.          GOTO 44003
  7712.       CALL SetBaud
  7713.  
  7714. ------------------------[ KG030301 ]-------------------------
  7715.  
  7716. Problem:  prompt for file displayed on security violation confusing
  7717. people because it wants only the file prefix and refuses to accept
  7718. extension or drive/path without making that clear.
  7719.  
  7720. Solution:  Change CONFIG.BAS as follows:
  7721.  
  7722. 17280 CALL ASKRO("Name of file shown for security breaches (prefix ONLY)",24,HJ$) ' KG030301
  7723.       IF LEN(HJ$) > 8 OR INSTR(HJ$,".") > 0 THEN _
  7724.          GOTO 17280
  7725.       IF LEN(HJ$) < 1 THEN _
  7726.          SECVIO.HLP$ = NONE.PICKED$ : _
  7727.          RETURN
  7728.       CALL ALLCAPS (HJ$)
  7729.       SECVIO.HLP$ = HELP.PATH$ + HJ$ + "." + HELP.EXTENSION$
  7730.       RETURN
  7731.  
  7732. ------------------------[ KG030203 ]-------------------------
  7733.  
  7734. Problem:  If caller happened to have many msgs, display of them in
  7735. msg scan may fail to pause when screen is full.   Also, # of messages
  7736. listed on a line was inconsistent between new and old messages.
  7737.  
  7738. Solution:  Change RBBS-PC.BAS as follows:
  7739.  
  7740. 1900 GOSUB 5344
  7741.      IF ZPrivateDoor THEN _
  7742.         ActionFlag = ZTrue
  7743.      ZPrevBase$ = ZActiveMessageFile$
  7744.      ShowActive = ZFalse
  7745.      IF NOT ActionFlag THEN _
  7746.         CALL QuickTPut ("Checking messages in " + ConfFileName$,0) : _
  7747.         ShowActive = ZTrue _
  7748.      ELSE CALL QuickTPut ("Loading messages",0)
  7749.      ZUserIn$ = ""
  7750.      MsgCt = 0                                                       ' KG030203
  7751.      MsgsFromUser = ZFalse
  7752.      ActiveMessages = 0
  7753.      MailReported = ActionFlag
  7754.      FirstOld = ZTrue
  7755.      GOSUB 23000
  7756.      MsgRec = FirstMsgRecord
  7757.      MaxMsgs = VAL(MID$(ZMsgRec$,89,7))
  7758.      IF MaxMsgs > WasMM THEN _
  7759.         MaxMsgs = WasMM
  7760.      REDIM ZMsgPtr(MaxMsgs,2)
  7761.      NumDots = 0
  7762.  
  7763. 1925 ZWasA = VAL(MID$(ZMsgRec$,2,4))
  7764.      IF LogonMailNew THEN _
  7765.         IF ZWasA <= ZLastMsgRead THEN _
  7766.            GOTO 1935
  7767.      IF NOT ShowActive THEN _
  7768.         GOTO 1930
  7769.      MailReported = ZTrue
  7770.      FirstNew = (ZWasA > ZLastMsgRead)
  7771.      IF FirstNew THEN _
  7772.         MsgCt = 0 : _                                                ' KG030203
  7773.         CALL SkipLine (1) : _
  7774.         CALL QuickTPut1 ("NEW Mail for YOU (* = Private)") _
  7775.      ELSE IF FirstOld THEN _
  7776.              CALL SkipLine (1) : _
  7777.              CALL QuickTPut1 ("OLD Mail for YOU (* = Private)") : _
  7778.              FirstOld = ZFalse
  7779.      ShowActive = NOT FirstNew
  7780.  
  7781. 1930 CALL QuickTPut (LEFT$(ZMsgRec$,5),0)
  7782.      MsgCt = MsgCt + 1                                               ' KG030203
  7783.      IF MsgCt MOD 15 = 0 THEN _                                      ' KG030203
  7784.         CALL SkipLine (1) : _                                        ' KG030203
  7785.         CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                     ' KG030203
  7786. 1960 WasK = 1
  7787.      FOR MsgCt = 1 TO MsgsFromUser                                   ' KG030203
  7788.         ZOutTxt$ = MID$(ZUserIn$,WasK,5)
  7789.         WasK = WasK + 5
  7790.         GOSUB 12978
  7791.         IF MsgCt MOD 15 = 0 THEN _                                   ' KG030203
  7792.            CALL SkipLine (1) : _                                     ' KG030203
  7793.            CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                  ' KG030203
  7794.      NEXT
  7795.      ZUserIn$ = ""
  7796.      CALL SkipLine (1)
  7797.      CALL QuickTPut1 ("Please K)ill old/unneeded msgs")
  7798.  
  7799. ------------------------[ KG030202 ]-------------------------
  7800.  
  7801. Problem:  In personal download, when have color graphics on,
  7802. color of description spills over into prompt to download what.
  7803.  
  7804. Solution:  Change RBBSSUB4.BAS as follows:
  7805.  
  7806. 59303 CALL QuickTPut (ZEmphasizeOff$,0)                              ' KG030202
  7807.       ZOutTxt$ = "Download what: L)ist, * = new, or file(s)" + _
  7808.            ZPressEnterExpert$
  7809.       ZMacroMin = 99
  7810.       ZStackC = ZTrue
  7811.       CALL PopCmdStack
  7812.       IF ZSubParm = -1 OR ZWasQ = 0 THEN _
  7813.          ZLastIndex = 0 : _
  7814.          EXIT SUB
  7815.  
  7816. ------------------------[ KG030201 ]-------------------------
  7817.  
  7818. Problem:  When remote called does Xoff (Control-S), display of
  7819. a message does not pause until after display of full screen or
  7820. end of message.
  7821.  
  7822. Solution:  Change RBBS-PC.BAS as follows:
  7823.  
  7824. 9085    IF LEFT$(ZOutTxt$,1) = ZStartOfHeader$ OR _
  7825.            LEFT$(ZOutTxt$,LEN(ZScreenOutMsg$)) = ZScreenOutMsg$ THEN _
  7826.            GOTO 9050
  7827.         ZOutTxt$(ZLinesInMsg) = ZOutTxt$
  7828.         IF Bracketed THEN _
  7829.            Bracketed = ZFalse : _
  7830.            HiLitedLine = ZLinesInMsg
  7831.         ZLinesInMsg = ZLinesInMsg + 1
  7832.         IF ZLinesInMsg > MsgDimXtra THEN _
  7833.            ZLinesInMsg = ZLinesInMsg - 1 : _
  7834.            CALL SkipLine (1) : _
  7835.            CALL QuickTPut1 ("Message too long.  Truncated to " + STR$(MsgDimXtra) + " lines!") : _
  7836.            ZOutTxt$ = "" : _
  7837.            RETURN
  7838.         IF NOT DontPrint THEN _                                      ' KG030201
  7839.            GOSUB 12979 : _                                           ' KG030201
  7840.            IF ZRet THEN _
  7841.               ZOutTxt$ = "" : _
  7842.               RETURN _                                               ' KG030201
  7843.            ELSE CALL AskMore ("",ZTrue,ZTrue,ZAnsIndex,ZFalse) : _   ' KG030201
  7844.                 IF ZNo THEN _                                        ' KG030201
  7845.                    DontPrint = ZTrue                                 ' KG030201
  7846.         GOTO 9050
  7847.  
  7848. ------------------------[ KG030101 ]-------------------------
  7849.  
  7850. Problem:  When having mail waiting in current confernce, and
  7851. read all the new mail, and then do a V)iew conference, the
  7852. mail waiting flag is still shown as on in the current conference.
  7853.  
  7854. Solution:  Change RBBSSUB4.BAS as follows:
  7855.  
  7856. 59852 IF EOF(2) OR NOT ZOK THEN _
  7857.          GOTO 59854
  7858.          CALL ReadAny
  7859.          ZActiveUserFile$ = ZOutTxt$
  7860.          CALL ReadAny
  7861.          IF ZErrCode > 0 THEN _
  7862.             GOTO 59854
  7863.          ZActiveMessageFile$ = ZOutTxt$
  7864.          CALL FindFile (ZActiveUserFile$,ZOK)
  7865.          IF NOT ZOK THEN _
  7866.             GOTO 59854
  7867.          CALL OpenUser (HighestUserRecord)
  7868.          FIELD 5, 128 AS ZUserRecord$
  7869.          CALL FindFile (ZActiveMessageFile$,ZOK)
  7870.          IF NOT ZOK THEN _
  7871.             GOTO 59854
  7872.          CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
  7873.                         0,0,HighestUserRecord,_
  7874.                         Found,HoldUserFileIndex,ZWasSL)
  7875.          IF NOT Found THEN _
  7876.             GOTO 59852
  7877.          CALL OpenMsg
  7878.          FIELD 1, 128 AS ZMsgRec$
  7879.          GET 1,1
  7880.          AnyMail = ZTrue
  7881.          WasX = CVI(MID$(ZUserRecord$,57,2))
  7882.          WasX = (WasX AND 512) > 0
  7883.          CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
  7884.          InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
  7885.          IF InCur THEN _
  7886.             WasX = ZMailWaiting : _                                  ' KG030101
  7887.             ZWasA = ZLastMsgRead _
  7888.          ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
  7889.                .
  7890.                .
  7891.                .
  7892.  
  7893. ------------------------[ KG022702 ]-------------------------
  7894.  
  7895. Problem:  When using LIT version with message import off
  7896. (MIMPORT OFF), get untrapped errors when message margin of
  7897. user set lower than that used by the message.
  7898.  
  7899. Solution:  Use new MIMPORT.LIT.
  7900.  
  7901. ------------------------[ KG022701 ]-------------------------
  7902.  
  7903. Problem:  Command stacking not always working right in msg
  7904. read.  E.g. "j xxx r test" will look for messages with text "r".
  7905.  
  7906. Solution:  Change RBBS-PC.BAS as follows:
  7907.  
  7908. 4330 QuickScanMsgs = ZFalse
  7909.      ReadMsgs = ZTrue
  7910.      HiLiteRec = -1
  7911.      ScanMsgs = ZFalse
  7912.      MsgStart = 6
  7913.      MsgEnd = 100
  7914.      IF ZLocalUserMode OR NOT ZLocalUser THEN _
  7915.         IF ReadMsgIn$ <> ZActiveMessageFile$ THEN _
  7916.            ReadMsgIn$ = ZActiveMessageFile$ : _
  7917.            CALL UpdtCalr ("Read Messages in " + ReadMsgIn$,1)
  7918.      GOSUB 1300
  7919.      GOTO 4350                                                       ' KG022701
  7920.  
  7921. 4360 ZWasLG$(11) = ZWasZ$
  7922.      NumMsgsSelected = ZLastIndex
  7923.      MsgIndex = ZAnsIndex                                            ' KG022701
  7924.      ZLastIndex = 0
  7925.      ToRequested = ZFalse
  7926.      FromRequested = ZFalse
  7927.      IF ZPageLength < 1 THEN _
  7928.         ZNonStop = ZTrue
  7929. 4370 MsgIndex = MsgIndex  + 1                                        ' KG022701
  7930. 4371 IF MsgIndex <= NumMsgsSelected THEN _                           ' KG022701
  7931.         IF LEN(ZUserIn$(ZAnsIndex)) = 1 AND _
  7932.            INSTR("Cc",ZUserIn$(MsgIndex)) > 0 THEN _                 ' KG022701
  7933.            GOTO 4370 _
  7934.         ELSE _
  7935.         CALL CheckInt (ZUserIn$(MsgIndex)) : _                       ' KG022701
  7936.         IF ZErrCode <> 0 THEN _
  7937.            ZWasEL = 4371 : _
  7938.            GOTO 13000 _
  7939.         ELSE CurMsg = ZTestedIntValue : _
  7940.              ZAnsIndex = MsgIndex : _                                ' KG022701
  7941.              GOTO 4415
  7942.  
  7943. 4400 GOSUB 12932                                                     ' KG022701
  7944.      IF ZWasQ = 0 THEN _
  7945.         RETURN
  7946. 4402 IF LEN(ZUserIn$(ZAnsIndex)) = 1 THEN _                          ' KG022701
  7947.         IF INSTR("Qq",ZUserIn$) THEN _
  7948.            RETURN _
  7949.         ELSE IF INSTR("Hh",LEFT$(ZUserIn$(ZAnsIndex),1)) THEN _      ' KG022701
  7950.                 ZFileName$ = ZHelpPath$ + "MR" + ZHelpExtension$ : _
  7951.                 GOSUB 1790 : _
  7952.                 GOTO 4390
  7953.      MsgIndex = 0                                                    ' KG022701
  7954.      NumMsgsSelected = ZWasQ
  7955.      GOTO 4370
  7956.  
  7957. 4416 IF INSTR("Mm",ZUserIn$(ZAnsIndex)) THEN _
  7958.         AddressedToUser = ZTrue : _
  7959.         GOTO 4370
  7960.      ZWasA = INSTR("FfTt",ZUserIn$(ZAnsIndex))
  7961.      IF ZWasA > 0 THEN _
  7962.         ToRequested = (ZWasA > 2) : _
  7963.         FromRequested = (ZWasA < 3) : _
  7964.         GOTO 4370
  7965.      IF CurMsg = 0 THEN _
  7966.         IF SearchHeader$ <> "" THEN _
  7967.            GOTO 4370 _
  7968.         ELSE SearchString$ = ZUserIn$(ZAnsIndex) : _                 ' KG022701
  7969.              CALL AllCaps (SearchString$) : _
  7970.              CALL Remove (SearchString$,CHR$(34) + CHR$(39)) : _
  7971.              SearchHeader$ = SearchString$ : _
  7972.              SubInHeader$ = SearchHeader$ : _
  7973.              GOTO 4370
  7974.      CALL SkipLine (1)
  7975.  
  7976. ------------------------[ RH022501 ]-------------------------
  7977.  
  7978. Problem:  in autodownload, the name displayed to the user is wrong
  7979. when default extension is added by rbbs.
  7980.  
  7981. Change RBBS-PC.BAS as follows:
  7982.  
  7983. 20247 ZWasDF = 0
  7984.       CALL BreakFileName (ZFileName$,DR$,WasX$,Extension$,ZFalse)
  7985.       IF ZAutoDownInProgress THEN _
  7986.          ZUserIn$(ZAnsIndex) = WasX$ + "." + Extension$ : _          ' RH022501
  7987.          ZOutTxt$ = "Transferring -- " + _
  7988.               ZUserIn$(ZAnsIndex) : _                                ' RH022501
  7989.          GOSUB 21640 : _
  7990.          IF ZFileSysParm > 1 THEN _
  7991.             RETURN
  7992.       IF INSTR("...WRK.FW .ARC.EXE.COM.OBJ.WKS.LBR.ZIP.PAK.ZOO.LZH.","."+Extension$+".") > 2 OR _
  7993.          MID$(Extension$,2,1) = "Q" OR _
  7994.          (ZRequireNonASCII AND Extension$ = "BAS") THEN _
  7995.             ZWasDF = ZTrue
  7996.  
  7997. ------------------------[ KG022301 ]-------------------------
  7998.  
  7999. Problem:  no way to trigger macro processing for on-line files.
  8000. Either not found or macro.  Now can have both.
  8001.  
  8002. Solution:  Add the following variable to RBBS-VAR.BAS:  ZFileLocations$
  8003.  
  8004. Change RBBSSUB4.BAS as follows:
  8005.  
  8006. (line 58700)
  8007.  
  8008.       SUB RotorsDir (FilName$,SDirAra$(1),MaxSearch,MarkingTime,PassToMacro$) STATIC ' KG022204
  8009.       ZOK = ZFalse
  8010.       ZDotFlag = ZFalse
  8011.       IF MarkingTime THEN _
  8012.          CALL QuickTPut ("Searching for "+FilName$,0)
  8013.       IF ZMenuIndex = 6 THEN _
  8014.          GOTO 58705
  8015.       NumSearch = 1
  8016.       WasX = 0
  8017.       WHILE (NOT ZOK) AND NumSearch <= MaxSearch AND _
  8018.          SDirAra$(NumSearch) <> ""
  8019.          IF MarkingTime THEN _
  8020.             CALL MarkTime (WasX)
  8021.          WasX$ = SDirAra$(NumSearch) + _
  8022.               FilName$
  8023.          CALL FindFile (WasX$,ZOK)
  8024.          NumSearch = NumSearch + 1
  8025.       WEND
  8026.       IF ZOK OR NOT ZFastFileSearch THEN _                           ' KG022301
  8027.          GOTO 58710                                                  ' KG022301
  8028.       CALL OpenRSeq (ZFastFileList$,HighRec,WasX,18)                 ' KG022301
  8029.       IF ZErrCode <> 0 THEN _                                        ' KG022301
  8030.          GOTO 58710                                                  ' KG022301
  8031.       CALL TrimTrail (FilName$,".")
  8032.       CALL BinSearch (FilName$,1,12,18,HighRec,RecFoundAt, RecFound$)
  8033.       ZOK = (RecFoundAt > 0)
  8034.       IF NOT ZOK THEN _                                              ' KG022301
  8035.          GOTO 58710                                                  ' KG022301
  8036.       ZOK = ZFalse
  8037.       CALL CheckInt (MID$(RecFound$,13,4))
  8038.       IF ZTestedIntValue < 1 THEN _                                  ' KG022301
  8039.          GOTO 58710                                                  ' KG022301
  8040.       CALL OpenRSeq (ZFastFileLocator$,HighRec,WasX,66)
  8041.       IF ZErrCode <> 0 OR ZTestedIntValue > HighRec THEN _           ' KG022301
  8042.          GOTO 58710                                                  ' KG022301
  8043.       FIELD 2, 66 AS LocatorRec$
  8044.       GET 2, ZTestedIntValue
  8045.       WasX$ = LEFT$(LocatorRec$,63)
  8046.       CALL Trim (WasX$)
  8047.       IF LEFT$(WasX$,2) = "M!" THEN _
  8048.          ZOK = ZFalse : _                                            ' KG022301
  8049.          ZGSRAra$(1) = PassToMacro$ : _                              ' KG022204
  8050.          WasX$ = RIGHT$(WasX$,LEN(WasX$)-2) : _                      ' KG022204
  8051.          CALL Trim (WasX$) : _                                       ' KG022204
  8052.          ZFileLocation$ = "" : _                                     ' KG022301
  8053.          CALL MacroExe (WasX$) : _                                   ' KG022204
  8054.          IF ZFileLocation$ = "" THEN _                               ' KG022301
  8055.             ZOK = ZFalse : _                                         ' KG022204
  8056.             GOTO 58711 _                                             ' KG022301
  8057.          ELSE WasX$ = ZFileLocation$                                 ' KG022301
  8058.       WasX$ = WasX$ + FilName$                                       ' KG022301
  8059.       CALL FindFile (WasX$,ZOK)                                      ' KG022301
  8060.       GOTO 58710                                                     ' KG022301
  8061.  
  8062. Change RBBSSUB5.BAS as follows:
  8063.  
  8064. 63336 GOSUB 63395
  8065.       IF NOT ZMacroActive THEN _
  8066.          ZMacroEcho = ZTrue : _
  8067.          EXIT SUB
  8068.       IF LEN(ZOutTxt$) < 3 THEN _
  8069.          GOTO 63398
  8070.       WasX$ = RIGHT$(ZOutTxt$,LEN(ZOutTxt$)-3)
  8071.       IF CompareVar > 0 THEN _
  8072.          IF NOT CaseExecute THEN _
  8073.             IF LEFT$(ZOutTxt$,3) = ZSmartTextCode$+"==" THEN _
  8074.                GOTO 63370 _
  8075.             ELSE IF LEFT$(ZOutTxt$,7) = ZSmartTextCode$ + "END ON" THEN _
  8076.                     CompareVar = 0 : _
  8077.                     GOTO 63336 _
  8078.                   ELSE GOTO 63336
  8079.       IF LEFT$(ZOutTxt$,1) <> ZSmartTextCode$ THEN _
  8080.          GOTO 63398
  8081.       CALL CheckInt (MID$(ZOutTxt$,2))
  8082.       IF ZErrCode > 0 THEN _
  8083.          GOTO 63398
  8084.       IF ZTestedIntValue > 0 AND ZTestedIntValue <= ZMaxWorkVar THEN _
  8085.          ZOutTxt$ = WasX$ : _  ' Macro command ask
  8086.          ZForceKeyboard = ZTrue : _
  8087.          ZMacroSave = ZTestedIntValue : _
  8088.          ZLinesPrinted = 1 : _
  8089.          ZNonStop = (ZPageLength < 1) : _
  8090.          EXIT SUB
  8091.       ON (1+INSTR("*0*1*B*FWT>>STON==M!M@EYEN/*TK<<:=LVNVCVLO",MID$(ZOutTxt$,2,2)))\2 GOTO _ ' KG022301
  8092.          63345, _  ' Display with no Carriage Return
  8093.          63347, _  ' Display with Carriage Return
  8094.          63340, _  ' Display Block
  8095.          63348, _  ' Display File
  8096.          63343, _  ' Wait # of seconds
  8097.          63350, _  ' Append to file
  8098.          63355, _  ' Stack
  8099.          63360, _  ' Case
  8100.          63370, _  ' Case Comparison
  8101.          63375, _  ' Macro execute
  8102.          63380, _  ' Macro Abort
  8103.          63383, _  ' Macro Echo on
  8104.          63385, _  ' Macro Echo off
  8105.          63336, _  ' Macro Comment
  8106.          63387, _  ' Turbo Key allowed
  8107.          63390, _  ' Form read
  8108.          63362, _  ' Assign value to work var
  8109.          63363, _  ' LV list verify
  8110.          63364, _  ' NV number verify
  8111.          63364, _  ' CV character verify                             ' KG022301
  8112.          63367     ' LO assign file location                         ' KG022301
  8113.       GOTO 63398
  8114.  
  8115. 63367 CALL TRIM (WasX$)                                              ' KG022301
  8116.       ZFileLocation$ = WasX$                                         ' KG022301
  8117.       GOTO 63336                                                     ' KG022301
  8118.  
  8119. ------------------------[ KG022205 ]-------------------------
  8120.  
  8121. Problem:  In arc view, if file invokes macro processing, the file
  8122. name was no longer correct when came back and reported file not
  8123. found.
  8124.  
  8125. 20143 ZWasZ$ = ZUserIn$(ZAnsIndex)
  8126.       WasZ$ = ZWasZ$                                                 ' KG022205
  8127.       CALL AllCaps (ZWasZ$)
  8128.       CALL BreakFileName (ZWasZ$,Drive$,Prefix$,Ext$,ZFalse)
  8129.       IF Ext$ = "" THEN _
  8130.          Ext$ = ZDefaultExtension$ : _
  8131.          ZWasZ$ = ZWasZ$ + "." + ZDefaultExtension$
  8132.       ZFileNameHold$ = ZWasZ$
  8133.       ZFileName$ = ZWasZ$
  8134.       CALL BadFile (Prefix$,BadFileNameIndex)
  8135.       ON BadFileNameIndex GOTO 20144,20146,20147
  8136.  
  8137. 20146 ZWasZ$ = WasZ$ + _                                             ' KG022205
  8138.            " not found!"
  8139.       CALL UpdtCalr (ZWasZ$,2)
  8140.       ZOutTxt$ = ZWasZ$ + _
  8141.            " Type correct filename" + ZPressEnterExpert$
  8142.       ZSubParm = 1
  8143.       CALL TGet
  8144.       IF ZSubParm = -1 OR ZWasQ = 0 THEN _
  8145.          RETURN
  8146.       ZUserIn$(ZAnsIndex) = ZUserIn$(1)
  8147.       GOTO 20143
  8148.  
  8149. ------------------------[ KG022204 ]-------------------------
  8150.  
  8151. Problem:  SysOps off-line files might want to process differently
  8152. when get an upload, view, or download rather than execute macro
  8153. only on download.
  8154.  
  8155. Solution:  pass D, V, or U to macro in first work variable so
  8156. can alter processing.
  8157.  
  8158. Change RBBSSUB2.BAS as follows:
  8159.  
  8160. 20145 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount + (NOT ZSysop),ZTrue,"V") ' KG022204
  8161.       IF ZOK THEN _
  8162.          GOTO 20148
  8163.  
  8164. Change RBBSSUB4.BAS as follows:
  8165.  
  8166. (line 58700)
  8167.  
  8168.       SUB RotorsDir (FilName$,SDirAra$(1),MaxSearch,MarkingTime,PassToMacro$) STATIC ' KG022204
  8169.       ZOK = ZFalse
  8170.       ZDotFlag = ZFalse
  8171.       IF MarkingTime THEN _
  8172.          CALL QuickTPut ("Searching for "+FilName$,0)
  8173.       IF ZMenuIndex = 6 THEN _
  8174.          GOTO 58705
  8175.       NumSearch = 1
  8176.       WasX = 0
  8177.       WHILE (NOT ZOK) AND NumSearch <= MaxSearch AND _
  8178.          SDirAra$(NumSearch) <> ""
  8179.          IF MarkingTime THEN _
  8180.             CALL MarkTime (WasX)
  8181.          WasX$ = SDirAra$(NumSearch) + _
  8182.               FilName$
  8183.          CALL FindFile (WasX$,ZOK)
  8184.          NumSearch = NumSearch + 1
  8185.       WEND
  8186.       IF ZOK OR NOT ZFastFileSearch THEN _                           ' KG022301
  8187.          GOTO 58710                                                  ' KG022301
  8188.       CALL OpenRSeq (ZFastFileList$,HighRec,WasX,18)                 ' KG022301
  8189.       IF ZErrCode <> 0 THEN _                                        ' KG022301
  8190.          GOTO 58710                                                  ' KG022301
  8191.       CALL TrimTrail (FilName$,".")
  8192.       CALL BinSearch (FilName$,1,12,18,HighRec,RecFoundAt, RecFound$)
  8193.       ZOK = (RecFoundAt > 0)
  8194.       IF NOT ZOK THEN _                                              ' KG022301
  8195.          GOTO 58710                                                  ' KG022301
  8196.       ZOK = ZFalse
  8197.       CALL CheckInt (MID$(RecFound$,13,4))
  8198.       IF ZTestedIntValue < 1 THEN _                                  ' KG022301
  8199.          GOTO 58710                                                  ' KG022301
  8200.       CALL OpenRSeq (ZFastFileLocator$,HighRec,WasX,66)
  8201.       IF ZErrCode <> 0 OR ZTestedIntValue > HighRec THEN _           ' KG022301
  8202.          GOTO 58710                                                  ' KG022301
  8203.       FIELD 2, 66 AS LocatorRec$
  8204.       GET 2, ZTestedIntValue
  8205.       WasX$ = LEFT$(LocatorRec$,63)
  8206.       CALL Trim (WasX$)
  8207.       IF LEFT$(WasX$,2) = "M!" THEN _
  8208.          ZOK = ZFalse : _                                            ' KG022301
  8209.          ZGSRAra$(1) = PassToMacro$ : _                              ' KG022204
  8210.          WasX$ = RIGHT$(WasX$,LEN(WasX$)-2) : _                      ' KG022204
  8211.          CALL Trim (WasX$) : _                                       ' KG022204
  8212.          ZFileLocation$ = "" : _                                     ' KG022301
  8213.          CALL MacroExe (WasX$) : _                                   ' KG022204
  8214.          IF ZFileLocation$ = "" THEN _                               ' KG022301
  8215.             ZOK = ZFalse : _                                         ' KG022204
  8216.             GOTO 58711 _                                             ' KG022301
  8217.          ELSE WasX$ = ZFileLocation$                                 ' KG022301
  8218.       WasX$ = WasX$ + FilName$                                       ' KG022301
  8219.       CALL FindFile (WasX$,ZOK)                                      ' KG022301
  8220.       GOTO 58710                                                     ' KG022301
  8221.  
  8222. 59336 ZUserIn$(WasI) = LEFT$(PartToPrint$,INSTR(PartToPrint$," ") - 1)
  8223.       CALL FindFile (ZPersonalDrvPath$ + ZUserIn$(WasI),ZOK)
  8224.       IF ZOK THEN _
  8225.          ZUserIn$(WasI) = ZPersonalDrvPath$ + ZUserIn$(WasI) _
  8226.       ELSE CALL RotorsDir (ZUserIn$(WasI),ZSubDir$(),ZSubDirCount + _
  8227.                       ((ZUserSecLevel < ZMinSecToView) OR _
  8228.                        NOT ZCanDnldFromUp),ZTrue,"D") : _            ' KG022204
  8229.            GOSUB 59338
  8230.       RETURN
  8231.  
  8232. Change RBBSSUB5.BAS as follows:
  8233.  
  8234. 20222 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount + _
  8235.                       ((ZUserSecLevel < ZMinSecToView) OR _
  8236.                        NOT ZCanDnldFromUp),MarkingTime,"D")          ' KG022204
  8237.  
  8238. 20440 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount,ZTrue,"U")  ' KG022204
  8239.  
  8240. ------------------------[ KG022203 ]-------------------------
  8241.  
  8242. Problem:  When locally viewing the distributed color graphics
  8243. door menu (MENU05C), the colors will bleed over to the right
  8244. side of the boundary of the menu.   The display looks fine
  8245. remotely.
  8246.  
  8247. Solution:  Replace MENU05C with the new one distributed in
  8248. the latest merge file.
  8249.  
  8250. ------------------------[ KG022202 ]-------------------------
  8251.  
  8252. Problem:  When installing RBBS-PC for the first time and use
  8253. the distributed def file RBBS-PC.DEF, the up and downloads do
  8254. not work properly unless RBBS-PC is installed in a subdirectory
  8255. called RBBS.
  8256.  
  8257. Solution:  In CONFIG, change the subdirectory for uploads from
  8258. "C:\RBBS\FILES" to "C:FILES", and change the two subdirectories
  8259. available for downloading from "C:\RBBS\FILES" to "C:FILES" and
  8260. from "C:\RBBS\BULLETINS" to "C:BULLETINS".
  8261.    These are changed in parameter 208.
  8262.  
  8263. ------------------------[ KG022201 ]-------------------------
  8264.  
  8265. Problem:  When doing a directory listing and V)iew archieve,
  8266. J)ump is no longer an option after listing resumes.
  8267.  
  8268. Solution:  Change RBBSSUB3.BAS as follows:
  8269.  
  8270. 58180 ZTurboKey = -ZTurboKeyUser
  8271.       ZStackC = ZTrue
  8272.       CALL AskMore (ExtraPrompt$, ZTrue, ZFalse,AbortIndex,ZFalse)
  8273.       IF ZSubParm = -1 THEN _
  8274.          GOTO 58183
  8275.       IF ZNo THEN _
  8276.          GOTO 58183
  8277.       CALL AllCaps (ZUserIn$(1))
  8278.       IF ZUserIn$(1) = "V" THEN _
  8279.          ZLastIndex = ZWasQ : _
  8280.          ZAnsIndex = 1 : _
  8281.          CALL GetArc : _
  8282.          ZJumpSupported = ZTrue : _                                  ' KG022201
  8283.          ZWasA = UpldIndex : _
  8284.          GOSUB 58185 : _
  8285.          UpldIndex = ZWasA : _
  8286.          GOTO 58180
  8287.       IF ZUserIn$(1) = "D" THEN _
  8288.          ZOutTxt$ = "Download what file(s)" : _
  8289.          ZStackC = ZTrue : _
  8290.          CALL PopCmdStack : _
  8291.          IF ZWasQ = 0 THEN _
  8292.             GOTO 58180
  8293.       IF ZJumpSearching THEN _
  8294.          PrevSearch$ = SearchFor$ : _
  8295.          SearchFor$ = ZJumpTo$ _
  8296.       ELSE SearchFor$ = SearchString$ : _
  8297.            IF LEN(ZUserIn$(1)) > 1 THEN _
  8298.            IF NOT ZYes AND CanDnld THEN _
  8299.               CALL SkipLine (1) : _
  8300.               DnldFlag = UpldIndex : _
  8301.               ZLastIndex = ZWasQ : _
  8302.               ZAnsIndex = 1 : _
  8303.               EXIT SUB
  8304.       IF ZNonStop THEN IF UpldIndex > 999 THEN _
  8305.          IF (SearchDate$ = "" OR NOT ZExpertUser) THEN _
  8306.             ZOutTxt$ = STR$(UpldIndex) + _
  8307.                " lines left to search.  Really go non-stop? (Y/[N])" : _
  8308.             ZNoAdvance = ZTrue : _
  8309.             ZTurboKey = -ZTurboKeyUser : _
  8310.             ZSubParm = 1 : _
  8311.             CALL TGet : _
  8312.             CALL WipeLine (79) : _
  8313.             ZNonStop = ZYes
  8314.       FMSCheckPoint = 0
  8315.       GOTO 58168
  8316.  
  8317. ------------------------[ KG022103 ]-------------------------
  8318.  
  8319. Problem:  LIT merges not assigned security right for new
  8320. users.
  8321.  
  8322. Solution:  Replace the file INDEF.LIT by the new one in the lastest
  8323. fix file merges.
  8324.  
  8325. ------------------------[ KG022102 ]-------------------------
  8326.  
  8327. Problem:  LIT merge generates a compile error when SURVEY 
  8328. metavariable is set to OFF.
  8329.  
  8330. Solution:  Replace the file SURVEY.LIT by the new one in
  8331. the latest fix file merges.
  8332.  
  8333. ------------------------[ KG022101 ]-------------------------
  8334.  
  8335. Problem:  When door to external protocols, not correctly tracking
  8336. bytes downloaded.   Caused by misspelled variable names.
  8337.  
  8338. Change RBBSSUB3.BAS as follows:
  8339.  
  8340. 43070 ZActiveMessageFile$ = ZOrigMsgFile$
  8341.       ZSubParm = 3
  8342.       CALL FileLock
  8343.       CALL OpenMsg
  8344.       FIELD 1, 128 AS ZMsgRec$
  8345.       GET 1,ZNodeRecIndex
  8346.       IF ZGlobalSysop THEN _
  8347.          MID$(ZMsgRec$,1,30) = "SYSOP" + SPACE$(25)
  8348.       MID$(ZMsgRec$,40,2) = STR$(ZExitToDoors)
  8349.       MID$(ZMsgRec$,42,2) = STR$(ZEightBit)
  8350.       MID$(ZMsgRec$,44,2) = STR$(ZBPS)
  8351.       MID$(ZMsgRec$,46,2) = STR$(ZUpperCase)
  8352.       MID$(ZMsgRec$,48,5) = MKS$(ZNumDnldBytes!) + MID$(STR$(-ZBatchTransfer),2) ' KG022101
  8353.       MID$(ZMsgRec$,53,2) = STR$(ZWasGR)
  8354.       MID$(ZMsgRec$,55,2) = STR$(ZSysop)
  8355.       MID$(ZMsgRec$,65,3) = CHR$(VAL(LEFT$(ZTimeLoggedOn$,2))) + _
  8356.                                    CHR$(VAL(MID$(ZTimeLoggedOn$,4,2))) + _
  8357.                                    CHR$(VAL(MID$(ZTimeLoggedOn$,7,2)))
  8358.       MID$(ZMsgRec$,72,2) = STR$(ZPrivateDoor)
  8359.       MID$(ZMsgRec$,74,1) = MID$(STR$(ZTransferFunction),2,1)
  8360.       MID$(ZMsgRec$,75,1) = ZWasFT$
  8361.       MID$(ZMsgRec$,113,2) = MKI$(CINT(ZTimeCredits!)/60)
  8362.       MID$(ZMsgRec$,79,8) = LEFT$(ZDooredTo$+"        ",8)
  8363.       MID$(ZMsgRec$,91,2) = STR$(ZReliableMode)
  8364.       CALL BreakFileName (ZCurPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZFalse)
  8365.       MID$(ZMsgRec$,93,8) = ZUserIn$ + SPACE$(8 - LEN(ZUserIn$))
  8366.       MID$(ZMsgRec$,101,2) = STR$(ZLocalUser)
  8367.       MID$(ZMsgRec$,103,2) = STR$(ZLocalUserMode)
  8368.       ZConfName$ = LEFT$(ZConfName$,INSTR(ZConfName$ + " "," ") - 1)
  8369.       MID$(ZMsgRec$,105,8) = ZConfName$ + SPACE$(8 - LEN(ZConfName$))
  8370.       MID$(ZMsgRec$,115,1) = MID$(STR$(ZAutoLogoffReq),2,1)
  8371.       MID$(ZMsgRec$,117,2) = STR$(ZMenuIndex)
  8372.       MID$(ZMsgRec$,119,2) = LEFT$(DATE$,2)
  8373.       MID$(ZMsgRec$,121,2) = MID$(DATE$,4,2)
  8374.       MID$(ZMsgRec$,123,2) = RIGHT$(DATE$,2)
  8375.       MID$(ZMsgRec$,125,2) = LEFT$(TIME$,2)
  8376.       MID$(ZMsgRec$,127,2) = MID$(TIME$,4,2)
  8377. ' ***   Save additional parameters for door restoral
  8378.       CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
  8379.       CALL PrintWorkA (STR$(ZLimitMinsPerSession))
  8380.       CLOSE 2
  8381.  
  8382. (line 44000)
  8383.  
  8384.       SUB ReadProf STATIC
  8385.       FIELD 1, 128 AS ZMsgRec$
  8386.       GET 1,ZNodeRecIndex
  8387.       ZReliableMode = VAL(MID$(ZMsgRec$,91,2))
  8388.       MID$(ZMsgRec$,40,2) = "00"
  8389.       ZEightBit = VAL(MID$(ZMsgRec$,42,2))
  8390.       ZBPS = VAL(MID$(ZMsgRec$,44,2))
  8391.       CALL CommInfo
  8392.       ZBaudTest! = VAL(MID$(ZBaudRates$,(-5 * ZBPS),5))
  8393.       ZUpperCase = VAL(MID$(ZMsgRec$,46,2))
  8394.       ZNumDnldBytes! = CVS(MID$(ZMsgRec$,48,4))                      ' KG022101
  8395.       ZBatchTransfer = (MID$(ZMsgRec$,52,1) = "1")
  8396.       ZWasGR = VAL(MID$(ZMsgRec$,53,2))
  8397.       HourLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,65,1))),2),2)
  8398.       MinLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,66,1))),2),2)
  8399.       SecLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,67,1))),2),2)
  8400.       ZTimeLoggedOn$ = HourLoggedOn$ + _
  8401.                         ":" + _
  8402.                         MinLoggedOn$ + _
  8403.                         ":" + _
  8404.                         SecLoggedOn$
  8405.       ZTransferFunction = VAL(MID$(ZMsgRec$,74,1))
  8406.       ZWasFT$ = MID$(ZMsgRec$,75,1)
  8407.       ZTimeCredits! = 60*CVI(MID$(ZMsgRec$,113,2))
  8408.       ZDooredTo$ = MID$(ZMsgRec$,79,8)
  8409.       CALL Trim (ZDooredTo$)
  8410.       IF ZExitToDoors AND ZDooredTo$ <> "" THEN _
  8411.          CALL OpenWork (2,ZDoorsDef$) : _
  8412.          IF ZErrCode = 0 THEN _
  8413.             CALL ReadParms (ZOutTxt$(),8,1) : _
  8414.             WHILE ZErrCode = 0 AND ZOutTxt$(1) <> ZDooredTo$ : _
  8415.                CALL ReadParms (ZOutTxt$(),8,1) : _
  8416.             WEND : _
  8417.             IF ZOutTxt$(1) = ZDooredTo$ THEN _
  8418.                ZDoorSkipsPswd = (ZOutTxt$(6) <> "Y") : _
  8419.                CALL BufFile (ZOutTxt$(7),WasX)
  8420.       ZErrCode = 0
  8421.       ZMenuIndex = VAL(MID$(ZMsgRec$,117,2))
  8422.       ZCurPUI$ = MID$(ZMsgRec$,93,8)
  8423.       CALL Remove (ZCurPUI$," ")
  8424.       IF ZCurPUI$ <> "" THEN _
  8425.          CALL BreakFileName (ZMainPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZTrue) : _
  8426.          ZCurPUI$ = ZOutTxt$ + ZCurPUI$ + ZWasZ$
  8427.       ZCustomPUI = (ZCurPUI$ <> "")
  8428.       ZLocalUser = VAL(MID$(ZMsgRec$,101,2))
  8429.       ZLocalUserMode = VAL(MID$(ZMsgRec$,103,2))
  8430.       ZHomeConf$ = MID$(ZMsgRec$,105,8)
  8431.       ZAutoLogoffReq = (VAL(MID$(ZMsgRec$,115,1)) <> 0)
  8432.       CALL Trim (ZHomeConf$)
  8433.       IF ZRequiredRings > 0 AND _
  8434.          INSTR(ZModemInitCmd$,"S0=255") THEN _
  8435.          COLOR 7,0,0 _
  8436.       ELSE COLOR ZFG,ZBG,ZBorder
  8437.       IF ZLocalUserMode THEN _
  8438.          GOTO 44003
  8439.       CALL SetBaud
  8440.  
  8441. ------------------------[ KG022001 ]-------------------------
  8442.  
  8443. Problem:  When using autodownload and do not specify an extension,
  8444. and default is appended, file name transmitted has no extension.
  8445.  
  8446. Solution:  Change RBBSSUB5.BAS as follows:
  8447.  
  8448. 20247 ZWasDF = 0
  8449.       CALL BreakFileName (ZFileName$,DR$,WasX$,Extension$,ZFalse)
  8450.       IF ZAutoDownInProgress THEN _
  8451.          ZOutTxt$ = "Transferring -- " + _
  8452.               WasX$ + "." + Extension$ : _                           ' KG022001
  8453.          GOSUB 21640 : _
  8454.          IF ZFileSysParm > 1 THEN _
  8455.             RETURN
  8456.       IF INSTR("...WRK.FW .ARC.EXE.COM.OBJ.WKS.LBR.ZIP.PAK.ZOO.LZH.","."+Extension$+".") > 2 OR _
  8457.          MID$(Extension$,2,1) = "Q" OR _
  8458.          (ZRequireNonASCII AND Extension$ = "BAS") THEN _
  8459.             ZWasDF = ZTrue
  8460.  
  8461.  
  8462. ------------------------[ KG021803 ]-------------------------
  8463.  
  8464. Problem:  In macro initialization of a variable, value includes the
  8465. variable number if a space separates the command and number.   Should
  8466. not matter whether say "{:=1" or "{:= 1", for example.
  8467.  
  8468. Solution:  Change RBBSSUB5.BAS as follows:
  8469.  
  8470. 63362 CALL Trim (WasX$)                                              ' KG021803
  8471.       CALL CheckInt (WasX$)
  8472.       WasX = INSTR(WasX$," ")
  8473.       IF WasX > 0 AND ZTestedIntValue > 0 AND ZTestedIntValue <= ZMaxWorkVar THEN _
  8474.          ZGSRAra$(ZTestedIntValue) = RIGHT$(WasX$,LEN(WasX$)-WasX)   ' KG021803
  8475.       GOTO 63336
  8476.  
  8477. ------------------------[ KG021802 ]-------------------------
  8478.  
  8479. Problem:  When implement macros in the Fast File System, the macros
  8480. are executed on more than download requests - including uploads and
  8481. file v)iew archive.
  8482.  
  8483. Change RBBSSUB2.BAS as follows:
  8484.  
  8485. 20145 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount + (NOT ZSysop),ZTrue,ZFalse) ' KG021802
  8486.       IF ZOK THEN _
  8487.          GOTO 20148
  8488.  
  8489. Change RBBSSUB4.BAS as follows:
  8490.  
  8491. (line 58700)
  8492.  
  8493.       SUB RotorsDir (FilName$,SDirAra$(1),MaxSearch,MarkingTime,DoMacro) STATIC ' KG021802
  8494.       ZOK = ZFalse
  8495.       ZDotFlag = ZFalse
  8496.       IF MarkingTime THEN _
  8497.          CALL QuickTPut ("Searching for "+FilName$,0)
  8498.       IF ZMenuIndex = 6 THEN _
  8499.          GOTO 58705
  8500.       NumSearch = 1
  8501.       WasX = 0
  8502.       WHILE (NOT ZOK) AND NumSearch <= MaxSearch AND _
  8503.          SDirAra$(NumSearch) <> ""
  8504.          IF MarkingTime THEN _
  8505.             CALL MarkTime (WasX)
  8506.          WasX$ = SDirAra$(NumSearch) + _
  8507.               FilName$
  8508.          CALL FindFile (WasX$,ZOK)
  8509.          NumSearch = NumSearch + 1
  8510.       WEND
  8511.       IF ZFastFileSearch AND NOT ZOK THEN _
  8512.          CALL OpenRSeq (ZFastFileList$,HighRec,WasX,18) : _
  8513.          IF ZErrCode = 0 THEN _
  8514.             CALL TrimTrail (FilName$,".") : _
  8515.             CALL BinSearch (FilName$,1,12,18,HighRec,RecFoundAt, RecFound$) : _
  8516.             ZOK = (RecFoundAt > 0) : _
  8517.             IF ZOK THEN _
  8518.                ZOK = ZFalse : _
  8519.                CALL CheckInt (MID$(RecFound$,13,4)) : _
  8520.                IF ZTestedIntValue > 0 THEN _
  8521.                   CALL OpenRSeq (ZFastFileLocator$,HighRec,WasX,66) : _
  8522.                   IF ZErrCode = 0 AND ZTestedIntValue <= HighRec THEN _
  8523.                      FIELD 2, 66 AS LocatorRec$ : _
  8524.                      GET 2, ZTestedIntValue : _
  8525.                      WasX$ = LEFT$(LocatorRec$,63) : _
  8526.                      CALL Trim (WasX$) : _
  8527.                      IF LEFT$(WasX$,2) = "M!" THEN _
  8528.                         ZOK = ZFalse : _                             ' KG021802
  8529.                         ZDotFlag = ZTrue : _                         ' KG021802
  8530.                         IF DoMacro THEN _                            ' KG021802
  8531.                            WasX$ = RIGHT$(WasX$,LEN(WasX$)-2) : _
  8532.                            CALL Trim (WasX$) : _
  8533.                            CALL MacroExe (WasX$) : _
  8534.                            ZOK = ZFalse : _                          ' KG021802
  8535.                            GOTO 58711 _                              ' KG021802
  8536.                         ELSE GOTO 58711 _                            ' KG021802
  8537.                      ELSE WasX$ = WasX$ + FilName$ : _
  8538.                           CALL FindFile (WasX$,ZOK)
  8539.       GOTO 58710
  8540.  
  8541. 58711 CALL SkipLine (-MarkingTime)                                   ' KG021802
  8542.       END SUB
  8543.  
  8544. 59336 ZUserIn$(WasI) = LEFT$(PartToPrint$,INSTR(PartToPrint$," ") - 1)
  8545.       CALL FindFile (ZPersonalDrvPath$ + ZUserIn$(WasI),ZOK)
  8546.       IF ZOK THEN _
  8547.          ZUserIn$(WasI) = ZPersonalDrvPath$ + ZUserIn$(WasI) _
  8548.       ELSE CALL RotorsDir (ZUserIn$(WasI),ZSubDir$(),ZSubDirCount + _
  8549.                       ((ZUserSecLevel < ZMinSecToView) OR _
  8550.                        NOT ZCanDnldFromUp),ZTrue,ZFalse) : _         ' KG021802
  8551.            GOSUB 59338
  8552.       RETURN
  8553.  
  8554. Change RBBSSUB5.BAS as follows:
  8555.  
  8556. 20222 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount + _
  8557.                       ((ZUserSecLevel < ZMinSecToView) OR _
  8558.                        NOT ZCanDnldFromUp),MarkingTime,ZTrue)        ' KG021802
  8559.  
  8560. 20440 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount,ZTrue,ZFalse) ' KG021802
  8561. 20450 IF Extension$ <> Check$ THEN _
  8562.          CALL RotorsDir (WasX$ + "." + Check$,ZSubDir$(),ZSubDirCount,ZTrue,ZFalse) : _ ' KG021802
  8563.          IF ZOK THEN _
  8564.             GOTO 20452
  8565.       GOTO 20447
  8566.  
  8567. ------------------------[ KG021801 ]-------------------------
  8568.  
  8569. Problem:  internal code documentation for SmartText omits notes
  8570. on what command invokes processing.
  8571.  
  8572. Change RBBSSUB4.BAS as follows:
  8573.  
  8574. 58266 SmartHold$ = DATE$                         ' DT Date           ' KG021801
  8575.       RETURN
  8576. 58267 CALL AMorPM
  8577.       SmartHold$ = ZTime$                        ' TM Time           ' KG021801
  8578.       RETURN
  8579.  
  8580. ------------------------[ KG021502 ]-------------------------
  8581.  
  8582. Problem:  When restrict a macro to the main prompt, and have a macro
  8583. with same name as a conference (to join it), "j <conf>" works but
  8584. "fn;ln;pswd;!<conf>" does not.  The macro gets substituted for
  8585. "<conf>".
  8586.  
  8587. Solution:  Change RBBS-PC.BAS as follows:
  8588.  
  8589. 1205 IF ZSubParm < 0 THEN _
  8590.         GOTO 202
  8591.      ZSubParm = 1
  8592.      ZStopInterrupts = ZFalse
  8593.      ZNonStop = (ZPageLength < 1)
  8594.      ZWasQ = 0
  8595.      IF ZHomeConf$ <> "" AND ZHomeConf$ <> "MAIN" THEN _
  8596.         TurboLogon = (NOT ConfMailJoin) : _
  8597.         ConfMailJoin = ZFalse : _
  8598.         ZFF = 8 : _
  8599.         ZUserIn$(2) = ZHomeConf$ : _
  8600.         ZHomeConf$ = "" : _
  8601.         ZWasQ = 1 : _
  8602.         ZAnsIndex = 1 : _
  8603.         ZLastIndex = 2 : _
  8604.         ZStoreParseAt = 1 : _
  8605.         ZLastCommand$ = "MJ" : _                                     ' KG021502
  8606.         GOTO 1240
  8607.      CALL SkipLine (1)
  8608.  
  8609. ------------------------[ KG021502 ]-------------------------
  8610.  
  8611. Problem:  the prompt after a macro ends is repeated twice.
  8612.  
  8613. Solution:  Change RBBSSUB2.BAS as follows:
  8614.  
  8615. 1628 CALL VerifyAns
  8616.      IF NOT ZOK THEN _
  8617.         CALL QuickTPut1 ("Invalid answer <" + ZUserIn$(1) + ">") : _
  8618.         GOTO 1500
  8619.      HoldA$ = ""
  8620.      ZForceKeyboard = ZFalse
  8621.      IF ZMacroSave > 0 THEN _
  8622.         ZGSRAra$(ZMacroSave) = ZUserIn$ : _
  8623.         ZMacroSave = 0 : _
  8624.         GOTO 1632
  8625.      IF (ZDistantTGet > 0) OR (ZMacroTemplate$ <> "") THEN _
  8626.         CALL WipeLine (38) : _
  8627.         IF NOT ZNo THEN _
  8628.            GOTO 1632 _
  8629.         ELSE ZWasQ = 0 : _
  8630.              ZMacroTemplate$ = "" : _
  8631.              ZDistantTGet = 0 : _
  8632.              ZNo = ZFalse : _
  8633.              GOTO 1633
  8634.      IF ZMacroActive THEN _
  8635.         ZLastIndex = ZWasQ : _
  8636.         FirstIndex = 1: _
  8637.         ZMacroActive = NOT EOF(6) : _                                ' KG021501
  8638.         EXIT SUB
  8639.      IF ZAnsIndex > 255 OR ((NOT InStack) AND INSTR(ZUserIn$,".") > 0) THEN _
  8640.         EXIT SUB
  8641.      IF MacroIndex THEN _
  8642.         MacroIndex = 1 _
  8643.      ELSE MacroIndex = ZAnsIndex
  8644.      CALL NoPath (ZUserIn$(MacroIndex),Found)
  8645.      IF Found THEN _
  8646.         EXIT SUB
  8647.      CALL CheckMacro (ZUserIn$(MacroIndex),Found)
  8648.      IF Found THEN _
  8649.         ZStoreParseAt = ZAnsIndex : _
  8650.         GOTO 1525
  8651.      EXIT SUB
  8652.  
  8653. ------------------------[ RH021501 ]-------------------------
  8654.  
  8655. Problem:  autodownload just does not work.
  8656.  
  8657. Solution:  Change RBBSSUB3.BAS as follows:
  8658.  
  8659. 20296 CALL FlushCom(ZWasY$)              ' CLEAR THE COMM BUFFER OF GARBAGE
  8660.       IF ZSubParm = -1 THEN _
  8661.          EXIT SUB
  8662.       CALL PutCom (ZEscape$+"OD")         ' SEND "ALERT" STRING
  8663.       IF ZSubParm = -1 THEN _
  8664.          EXIT SUB
  8665.       IF ZAbort = ZTrue THEN _
  8666.          GOTO 20306
  8667.       CALL LPrnt("Sending FILENAME -- ",1)
  8668.       CALL LPrnt(ZReturnLineFeed$ + CHR$(9),0)
  8669.       CALL DelayTime (1)                   ' WAIT 1 SECOND FOR SETUP
  8670. '
  8671. '               SEND ONE CHARACTER AT A TIME
  8672. '
  8673.       CALL BreakFileName (ZUserIn$(ZAnsIndex),WasX$,ZOutTxt$,ZWasY$,ZTrue) ' RH021501
  8674.       ZOutTxt$ = ZOutTxt$ + ZWasY$ + "=X"                            ' RH021501
  8675.       FOR WasX = 1 TO LEN(ZOutTxt$)
  8676.          CALL PutCom (MID$(ZOutTxt$,WasX,1))     ' SEND 1 CHARACTER
  8677.          IF ZSubParm = -1 THEN _
  8678.             EXIT SUB
  8679.          IF ZAbort = ZTrue THEN _
  8680.             GOTO 20306
  8681.          CALL LPrnt(MID$(ZOutTxt$,WasX,1),0)     ' DISPLAY IF NEEDED
  8682.          ZDelay! = TIMER + 10            ' SET MAXIMUM TIME TO WAIT FOR Reply
  8683.          Char = ZTrue
  8684.          WHILE Char = -1
  8685.             CALL CheckTime(ZDelay!, TempElapsed!, 1)
  8686.             IF TempElapsed! <= 0 THEN _
  8687.                GOTO 20300     ' IF ZNo ECHO, CANCEL FILENAME Transfer
  8688.             CALL EofComm (Char)
  8689.          WEND                 ' JUMP OUT IF CHARACTER IS RECEIVED
  8690.  
  8691. Change RBBSSUB4.BAS as follows:
  8692.  
  8693. (line 59400)
  8694.       SUB LogPDown (PrivateDnld,DwnIndex) STATIC                     ' RH021501
  8695.       IF NOT PrivateDnld THEN _
  8696.          EXIT SUB
  8697.       ZWasEN$ = ZPersonalDir$
  8698.       WasBX = &H4
  8699.       ZSubParm = 9
  8700.       CALL FileLock
  8701.       WasL = 36 + ZMaxDescLen + ZPersonalLen
  8702.       CLOSE 2
  8703.       IF ZShareIt THEN _
  8704.          OPEN ZWasEN$ FOR RANDOM SHARED AS #2 LEN=WasL _
  8705.       ELSE OPEN "R",2,ZPersonalDir$,WasL
  8706.       FIELD #2,WasL AS PersonalRec$
  8707.       ZWasA = VAL(MID$(ZUserIn$(0),5 * (DwnIndex - 1) + 1,5))        ' RH021501
  8708.       GET #2,ZWasA
  8709.       MID$(PersonalRec$,WasL-2,1) = "!"
  8710.       PUT #2,ZWasA
  8711.       CALL UnLockAppend
  8712.       END SUB 
  8713.  
  8714. Change RBBSSUB3.BAS as follows:
  8715.  
  8716. 20296 CALL FlushCom(ZWasY$)              ' CLEAR THE COMM BUFFER OF GARBAGE
  8717.       IF ZSubParm = -1 THEN _
  8718.          EXIT SUB
  8719.       CALL PutCom (ZEscape$+"OD")         ' SEND "ALERT" STRING
  8720.       IF ZSubParm = -1 THEN _
  8721.          EXIT SUB
  8722.       IF ZAbort = ZTrue THEN _
  8723.          GOTO 20306
  8724.       CALL LPrnt("Sending FILENAME -- ",1)
  8725.       CALL LPrnt(ZReturnLineFeed$ + CHR$(9),0)
  8726.       CALL DelayTime (1)                   ' WAIT 1 SECOND FOR SETUP
  8727. '
  8728. '               SEND ONE CHARACTER AT A TIME
  8729. '
  8730.       CALL BreakFileName (ZUserIn$(ZAnsIndex),WasX$,ZOutTxt$,ZWasY$,ZTrue) ' RH021501
  8731.       ZOutTxt$ = ZOutTxt$ + ZWasY$ + "=X"                            ' RH021501
  8732.       FOR WasX = 1 TO LEN(ZOutTxt$)
  8733.          CALL PutCom (MID$(ZOutTxt$,WasX,1))     ' SEND 1 CHARACTER
  8734.          IF ZSubParm = -1 THEN _
  8735.             EXIT SUB
  8736.          IF ZAbort = ZTrue THEN _
  8737.             GOTO 20306
  8738.          CALL LPrnt(MID$(ZOutTxt$,WasX,1),0)     ' DISPLAY IF NEEDED
  8739.          ZDelay! = TIMER + 10            ' SET MAXIMUM TIME TO WAIT FOR Reply
  8740.          Char = ZTrue
  8741.          WHILE Char = -1
  8742.             CALL CheckTime(ZDelay!, TempElapsed!, 1)
  8743.             IF TempElapsed! <= 0 THEN _
  8744.                GOTO 20300     ' IF ZNo ECHO, CANCEL FILENAME Transfer
  8745.             CALL EofComm (Char)
  8746.          WEND                 ' JUMP OUT IF CHARACTER IS RECEIVED
  8747.  
  8748.